home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload Trio 2
/
Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO
/
dir41
/
timstk11.zip
/
MANUAL.TXT
< prev
next >
Wrap
Text File
|
1993-04-01
|
190KB
|
5,267 lines
BE, Inc.
T i m e S t a c k (TM)
Version 1.10
The Ultimate Software Timing and Stack Analysis Utility
April 1, 1993
_______
____|__ | (R)
--| | |-------------------
| ____|__ | Association of
| | |_| Shareware
|__| o | Professionals
-----| | |---------------------
|___|___| MEMBER
"We provide answers you never had before"
TimeStack User's Guide
Copyright 1993 by BE, Inc.
All Rights Reserved
The information in this document is subject to change without
notice and does not represent a commitment on the part of BE,
Inc.
BE, INC. MAKES NO WARRANTY OF ANY KIND WITH REGARD TO THIS
MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. BE, INC.
SHALL NOT BE LIABLE FOR ERRORS CONTAINED HEREIN OR FOR INCIDENTAL
OR CONSEQUENTIAL DAMAGES IN CONNECTION WITH THE PERFORMANCE OF
SERVICES USING THIS MATERIAL. THE ENTIRE RISK AS TO THE QUALITY
AND PERFORMANCE OF THE SOFTWARE IS WITH THE USER., INCLUDING BUT
NOT LIMITED TO LOSS OF PROFIT, AND SPECIAL, INCIDENTAL,
CONSEQUENTIAL, OR OTHER SIMILAR CLAIMS.
U.S. GOVERNMENT RESTRICTED RIGHTS LEGEND. Use, duplication, or
disclosure by the Government is subject to restrictions as set
forth in subparagraph (c)(1)(ii) of the Rights in Technical Data
and Computer Software clause at DFARS 252.227-7013.
All BE, Inc. products are trademarks or registered trademarks of
BE, Inc. Other brand and product names are trademarks or
registered trademarks of their respective holders.
BE, Inc.
P.O. Box 29419
Indianapolis, IN 46229-0419 TimeStack User's Guide Table Of Contents
Table Of Contents
Table Of Contents i
Introduction 1
Welcome to TimeStack.......................................1
What Is TimeStack..........................................1
Why TimeStack Is Unique....................................2
What TimeStack Does Not Do.................................2
The User's Guide...........................................2
Definition Of Shareware....................................3
The Association of Shareware Professionals (ASP)...........4
Registration Information...................................4
How To Contact BE, Inc.....................................5
Chapter One - Starting Up 6
System Requirements........................................6
Installation...............................................6
Configuring AUTOEXEC.BAT..............................7
Command Line Syntax........................................7
Loading and Running TimeStack..............................8
Chapter Two - Menus and Windows 9
Screen Layout..............................................9
Menus.....................................................10
How the menu works...................................10
Status line..........................................11
Entering filenames or text...........................11
Entering numbers and addresses.......................12
Menu Selections...........................................13
File.................................................13
Load............................................13
Restore.........................................13
i TimeStack User's Guide Table Of Contents
Save............................................13
Get.............................................14
Put.............................................14
Analysis.............................................14
Edit.................................................15
Conditional branches............................15
Jump to subroutine..............................15
Jump indirect...................................16
Clear................................................16
Disasm...............................................16
Options..............................................16
Type of processor...............................16
Clock rate......................................16
Divisor for clock...............................17
Get.............................................17
1. Config.......................................17
2. Node.........................................17
Print................................................17
Comment.........................................18
1. Path to File.................................18
2. Disasm to File...............................18
3. Path to Printer..............................18
4. Disasm to Printer............................18
Quit.................................................19
Windows...................................................19
Selecting a window...................................19
Moving and sizing a window...........................19
Display of subroutines...............................20
Windows Displayed.........................................20
1 - Special Nodes....................................20
2 - Disassembly......................................20
3 - Analysis Results.................................21
4 - Maximum Execution................................21
5 - Minimum Execution................................22
6 - Stack Depth......................................22
Special Keys..............................................22
Function keys........................................22
Hot keys.............................................23
Other keys...........................................23
On-Line Help..............................................24
Chapter Three - Understanding TimeStack 25
Assembly Language Formats.................................25
Differences in mnemonics.............................26
Demo program limitations.............................27
Hex Files.................................................27
Motorola hex files...................................28
Intel hex files......................................28
Possible errors......................................29
Program Listings..........................................29
Configuration Files.......................................29
ii TimeStack User's Guide Table Of Contents
Node Files................................................30
Temporary Files...........................................30
Start and Stop Addresses..................................30
Timing Concepts...........................................31
Conditional Branches......................................31
Take.................................................31
Fall.................................................32
Normal...............................................32
Program Loops.............................................32
Subroutines...............................................34
Jump Indirect.............................................35
Stack Depth...............................................35
Chapter Four - Tutorial 36
Look at Listing...........................................36
Invoking Program..........................................36
Configuring TimeStack.....................................37
Load the Hex File.........................................37
Timing Subroutines........................................38
Timing Subroutines with Conditional Branches..............39
Timing Loops..............................................41
Simple loop..........................................41
Loop with middle exit................................42
Printing the Results......................................43
Quitting the Program......................................44
Chapter Five - Timing Strategies 45
Have a Listing Ready......................................45
What Units to Use.........................................45
Start Small...............................................45
Be Realistic..............................................46
More Than One Path........................................47
Chapter Six - Advanced Tutorial 48
Invoke Program Again......................................48
Complex Loops.............................................48
Indirect Jump.............................................50
Untimeable Instructions...................................51
Illegal Instructions......................................51
Nested Loops..............................................52
Loops inside subroutines.............................52
Loops inside other loops.............................54
Subroutines with Different Execution Times................55
Stack Imbalance...........................................56
Infinite Loops............................................57
Memory limitations...................................58
Branch Past Stop Address..................................58
Actual Stop Address.......................................59
Forcing Conditional Branches..............................60
Save to File..............................................60
High Level Languages......................................60
iii TimeStack User's Guide Table Of Contents
Appendix A - Listing of Demo Program 61
Appendix B - Warning and Error Messages 69
Warning Messages..........................................69
Error Messages............................................70
Appendix C - Key Summary 74
Appendix D - Processor Specifics 76
TSDEMO....................................................76
TS6811....................................................77
TS6805....................................................78
TS8051....................................................79
TS8048....................................................80
Index 81
iv TimeStack User's Guide Introduction
Introduction
Welcome to TimeStack
Thank you for your purchase of TimeStack. Your days of
counting opcode cycles and looking for instructions
that push data on the stack are over. You will now be
able to quickly document exactly how long an assembly
language function takes to execute, find its worst
stack depth usage, and check for stack imbalances!
What Is TimeStack
TimeStack is a better way to time and analyze your
real-time assembly language programs.
It is beneficial in real-time assembly language
programs to know four things.
* The absolute theoretical maximum execution time,
* minimum execution time,
* worst stack depth, and
* stack imbalances.
It is also beneficial to see how these paths were
achieved. This allows proving that a program will
execute within its limitations. TimeStack gives you
this information.
1 TimeStack User's Guide Introduction
Why TimeStack Is Unique
Until now, execution time and stack depth had to be
calculated by hand. TimeStack eliminates this drudgery.
Using a simulator to verify timing is much harder than
using it to do a functional test of a program. It is a
long and tedious task to configure the inputs of a
simulator to time the path that is thought to be the
longest executing. TimeStack is better than a simulator
for timings because all possible combinations of
branches are examined.
Some of the features that make TimeStack easy to use
are pull down menus, hot keys, and multiple windows for
display of information.
It includes the ability to disassemble, send the
results of the analysis to a printer or file, and save
its current configuration.
What TimeStack Does Not Do
TimeStack is not a simulator. If the program contains a
loop, the user will need to assist TimeStack by
indicating how many times the loop takes place. It does
not know what has been loaded into processor registers.
If a portion of the logic has special considerations
based on a register or flag value (loop counters,
indirect jumps, etc.,) they must be specified by the
user.
The User's Guide
The User's Guide provides all of the information about
TimeStack as well as examples.
Chapter One - Starting Up tells you how to install
TimeStack on your system.
Chapter Two - Menus and Windows describes the screen
layout and how to work the menu system.
Chapter Three - Understanding TimeStack goes into some
background on what TimeStack needs to run and concepts
involved with timing a program.
2 TimeStack User's Guide Introduction
Chapter Four - Tutorial is an actual demonstration of
how to analyze a simple program. Many of the concepts
are shown.
Chapter Five - Timing Strategies discusses some of the
things to keep in mind while timing.
Chapter Six - Advanced Tutorial expands on the
demonstration by addressing more advanced topics.
Appendix A - Listing of Demo Program is the complete
listing of the demonstration program used in the
examples.
Appendix B - Warning and Error Messages lists and
explains all warning and error messages that may be
encountered, and suggests possible solutions.
Appendix C - Key Summary is a convenient reference for
all function keys and hot keys.
Appendix D - Processor Specifics describes any special
characteristics an individual processor may have.
Definition Of Shareware
TimeStack is a copyrighted program which is being
marketed as shareware. It is not a public domain
program and it is not free.
Shareware is a distribution method, not a type of
software. The shareware system makes fitting your needs
easier, because you can try before you buy. Shareware
has the ultimate money-back guarantee - if you don't
use the product, you don't pay for it.
Copyright laws apply to both shareware and commercial
software, and the copyright holder retains all rights,
with a few specific exceptions as stated later.
Shareware authors are accomplished programmers and the
programs are comparable in quality to commercial
software (in both cases, there are good programs and
bad ones). The main difference is in the method of
distribution. The author specifically grants the right
to copy and distribute the software, either to all and
sundry or to a specific group. For example, some
authors require written permission before a commercial
disk vendor may copy their shareware.
3 TimeStack User's Guide Introduction
The Association of Shareware Professionals (ASP)
The ASP is an association for shareware authors with
the general goals of educating shareware authors and
distributors and the public, setting standards, sharing
resources and information among members.
Shareware produced by ASP members must meet minimum
quality standards. The program must be fully
functional, not crippled, a demo, or out-of-date
version. The documentation must be complete and clearly
state the registration fee and the benefits of
registering. ASP members must provide free mail or
telephone support for a minimum of three months after
registration. Also, members must follow other
guidelines to insure that a user is dealt with
professionally.
BE, Inc. is a member of the Association of Shareware
Professionals (ASP). ASP wants to make sure that the
shareware principle works for you. If you are unable to
resolve a shareware-related problem with an ASP member
by contacting the member directly, ASP may be able to
help. The ASP Ombudsman can help you resolve a dispute
or problem with an ASP member, but does not provide
technical support for members' products. Please write
to the ASP Ombudsman at 545 Grover Road, Muskegon, MI
49442 or send a CompuServe message via CompuServe Mail
to ASP Ombudsman 70007,3536.
Registration Information
TimeStack is provided at no charge to the user for
evaluation. Feel free to share it with your friends,
but do not give it away altered or as part of another
system. The essence of "user-supported" software is to
provide personal computer users with quality software
without high prices, and yet to provide incentive for
programmers to continue to develop new products.
BE, Inc. grants you a limited license to use TimeStack
for evaluation purposes only for a period not to exceed
30 days. If you intend to continue using TimeStack or
its documentation after the 30-day evaluation period,
you MUST make a registration payment to BE, Inc. Using
TimeStack after the evaluation period has ended without
registering is a violation of this limited license.
TimeStack may be registered by using the accompanying
order form. You may also register using MasterCard or
4 TimeStack User's Guide Introduction
Visa by phone (1-800-628-9085). Site licenses and
volume discount arrangements may be made by contacting
BE, Inc. Company purchase orders are welcomed.
The $129.95 registration fee will license one copy for
use on any one computer at any one time. Additional
sites or additional computers on a local area network
must be licensed separately. If you have any questions
please contact BE, Inc.
Registered users will receive:
* The complete TimeStack package including typeset
manual.
* The most current version of TimeStack. BE, Inc. is
continuously improving its products and registration
ensures that you have the latest version.
* Free technical support.
* Notification of significant upgrades to TimeStack.
How To Contact BE, Inc.
When you register your software, you allow us to give
you the kind of support you deserve. You may contact us
by mail, by telephone, or on CompuServe.
BE, Inc.
P.O. Box 29419
Indianapolis, IN 46229-0419
(317) 894-7021
1-800-628-9085 (orders only)
CompuServe [70353,2665]
5 TimeStack User's Guide Chapter One - Starting Up
Chapter One - Starting Up
System Requirements
TimeStack requires the following system configuration:
* IBM Personal Computer or a compatible,
* at least 512K of RAM,
* DOS Version 2.1 or greater,
* a hard disk drive or floppy disk drive, and
* IBM PC compatible video adapter.
For fastest operation, a computer of at least an IBM-AT
class machine is preferred. Of course, TimeStack will
work with lesser models, but with a degradation in
operating speed.
Installation
Before you install TimeStack, please read the
information in the README file. The README file
contains any last minute information that is not
contained in this manual.
Installation is fairly simple. All of the files on the
TimeStack Program disk(s) are copied to a subdirectory
on a hard disk or copied to a separate floppy disk.
6 TimeStack User's Guide Chapter One - Starting Up
* Prepare the destination that is to receive the
TimeStack files. This could be another floppy disk
or a subdirectory on the hard disk.
* Insert the TimeStack Program disk to be installed
into the floppy disk drive.
* Copy all the files from the TimeStack Program disk
to the desired destination. The commands usually
look like this:
MD C:\TS
COPY A:*.* C:\TS
* Do this for each disk that is to be installed. The
TimeStack files are not sensitive to the directory
that they are placed.
Configuring AUTOEXEC.BAT
At the end of installation, you may find it convenient
to have DOS automatically search the directory that
contains the TimeStack files. DOS searches for a file
called AUTOEXEC.BAT when you start your computer. It
performs any commands that you might place in it.
One useful command is PATH. It tells DOS which
directories to search for executable commands after it
has searched the current working directory. The command
to have it search the TimeStack directory just created
might look something like this:
PATH C:\TS
If there are other directories already specified in the
PATH command, the TimeStack directory should be placed
at the end. A semicolon separates each directory
specified in the list:
PATH C:\DOS;C:\BIN;C:\TS
Command Line Syntax
The name of the executable program that is typed at the
command line is different for each family of
processors. The generic command-line syntax for running
TimeStack is:
TSxxxx
7 TimeStack User's Guide Chapter One - Starting Up
where xxxx is the name of the processor family.
Currently, the valid program names are:
* TSDEMO Demonstration program
* TS6811 Motorola 6800/1/2/3 and 68HC11 families
* TS6805 Motorola 6805 HMOS, HCMOS, and CMOS families
* TS8051 Intel 8051 families
* TS8048 Intel 8020/1 and 8048 families
Loading and Running TimeStack
If you are using a hard disk system, change to the
directory where the TimeStack files are located. Type
the program name at the DOS prompt and press Enter.
If you are operating from a floppy system, place the
TimeStack disk in the drive, change the current default
drive to that drive, type the program name, and press
Enter.
8 TimeStack User's Guide Chapter Two - Menus and Windows
Chapter Two - Menus and Windows
Screen Layout
The screen as displayed in its default configuration
has two major parts. The single line at the top is the
main menu command bar. It is used to select the many
different functions and includes a one-line help
message about the currently selected item in a status
line at the bottom. The rest of the screen contains the
display windows with analysis information (see Figure
2-1).
9 TimeStack User's Guide Chapter Two - Menus and Windows
File Analysis Edit Clear Disasm Options Print Quit
____+----------------------------+________+------- 3 - Analysis Results -------+
____| Start address : 002F |________| 68DEMO at 1 MHz / 4 |
____| Stop address : FFFF |________| 002F to 0043 Bytes 21 |
____+----------------------------+________| Stack now -2 max 0 |
+---------- 1 - Special Nodes -----------+| Cycle min 16 max 26 |
| No special nodes || 64.0 us 104.0 us |
| || |
| |+------------------------------------+
| |+------ 4 - Maximum Execution -------+
| || 1) 0030 : BCC 0038 FALL |
| || 2) 0036 : BCC 003D TAKE |
| || 3) 003E : BCC 0043 FALL |
| |+------------------------------------+
+----------------------------------------++------ 5 - Minimum Execution -------+
+----------- 2 - Disassembly ------------+| 1) 0030 : BCC 0038 TAKE |
| No Disasm address entered || |
| || |
| |+------------------------------------+
| |+--------- 6 - Stack Depth ----------+
| || 1) 0030 : BCC 0038 FALL |
| || 2) 0036 : BCC 003D FALL |
| || |
+----------------------------------------++------------------------------------+
Analyze program from start to stop address
Figure 2-1 Typical screen
Menus
The pull down menus are selected by using the cursor
keys and pressing Enter. Another method is to press the
first letter of the menu description.
How the menu works
The TimeStack menu operates very much like most other
popular menus.
Pressing Esc aborts the current operation and backs up
one level in the menu. Thus, pressing Esc a multiple
number of times will eventually return the cursor to
the main menu.
The left and right arrow keys are used to move the
highlight bar back and forth along the menu line.
10 TimeStack User's Guide Chapter Two - Menus and Windows
Pressing Enter selects the menu item and pulls down the
next menu or invokes whatever action should take place.
On the pull down menus, pressing the up and down arrow
keys moves the highlight bar through the selections.
Pressing Enter selects the menu item or invokes
whatever action should take place.
The first letter of the menu item name may be pressed
to select the menu item. Some menu items may be
selected with a hot key which is described in Special
Keys.
Status line
The status line is located at the bottom of the screen.
It is a single line that displays a simple description
about the currently selected menu item. For further
information on the current menu item, press F1 for
help.
Entering filenames or text
Filenames and text are entered in many different
places. Both are entered using the same basic
mechanism.
A prompt for a filename or text places a box on the
screen just below the menu item that was picked to
request the information. This box contains a
description of what type of information should be
entered. Below the description line is the line on
which the information will be entered. This line will
either start off empty or contain whatever information
has previously been entered for that item.
If there was text that was previously entered and it is
displayed, the cursor will be positioned at the end of
it. The first keypress is very important. Pressing any
alphanumerical key will clear this text and start a new
entry with that key. Pressing any type of cursor
movement key such as Home, End, Cur Left, Cur Right,
Backspace, or Del will immediately start to edit the
existing text.
If Esc is pressed before Enter is pressed, the original
text is not changed. The Esc key is sort of an "oh-no"
key. It lets you back out of a mistake before it's too
late.
11 TimeStack User's Guide Chapter Two - Menus and Windows
Entering numbers and addresses
Numbers are entered the same way that text is entered.
Any previously entered number is displayed and a new
number may be typed in immediately or the old number
may be edited. If Esc is pressed before Enter is
pressed, the original number is not changed.
All numbers that are entered must fall in a certain
range. If the new number that is entered falls outside
of this range when Enter is pressed, the number just
entered is erased and the old number is redisplayed.
This is typically used to limit that maximum value that
may be entered.
Information that requires a number to be entered will
default to either decimal or hexadecimal without
requiring any prefix or postfix characters. The default
is logical for the value to be entered. Values that
represent counts or number of times to do something are
decimal numbers. Addresses are in hexadecimal.
Upper and lower case is not significant when entering a
number. This is only relevant for hexadecimal numbers
and prefix or postfix characters.
The default number base may be overridden by using a
prefix or postfix. The two different prefixes that may
be used to force a decimal number base are:
* & &123
* d' d'123 or D'123
The five different prefixes that may be used to force a
hexadecimal number base are:
* $ $ABCD
* 0x 0xABCD or 0XABCD
* h' h'ABCD or H'ABCD
* x' x'ABCD or X'ABCD
* 0x' 0x'ABCD or 0X'ABCD
The postfix that may be used to force a hexadecimal
number base is:
* h ABCDh or ABCDH
12 TimeStack User's Guide Chapter Two - Menus and Windows
Menu Selections
This section provides a reference to each menu item and
prompt. It is arranged in the order that the menus
appear on the screen.
File
ALT-F The File menu lets you manipulate all files in
TimeStack. This includes loading the hex file, saving
and restoring the node list, and getting and putting
the configuration to disk.
Load
ALT-L This prompts the name of the hex file. The hex file is
given a default extension of .HEX if no extension is
entered. If an extension is not desired then enter the
name as NAME. with a period on the end.
The hex file may be Motorola or Intel hex format. For a
more complete discussion see the section titled Hex
Files.
The hex file is automatically loaded if a configuration
file is loaded and there is a hex file name specified
in its configuration.
Restore
ALT-R The node list file name is entered here. This name is
used to read in the special node list file. Any name
entered here will also be used by the menu File | Save
described next.
The node list file is given a default extension of .NOD
if no extension is entered. If an extension is not
desired then enter the name as NAME. with a period on
the end.
The node list file is automatically loaded if a
configuration file is loaded and there is a node list
file name specified.
Save
ALT-S This name is used to write out the special node list
file. The node list file name entered here is the same
name used in the menu File | Restore described above.
13 TimeStack User's Guide Chapter Two - Menus and Windows
The node list file is given a default extension of .NOD
if no extension is entered. If an extension is not
desired then enter the name as NAME. with a period on
the end.
The node list file is automatically saved if the
automatic node list file save feature is active in the
Options | 2. Node menu and there is a node list file
name specified.
Get
The configuration of TimeStack is read in from here.
Any name entered here will also be used by the menu
File | Put described next.
The configuration file is given a default extension of
.CFG if no extension is entered. If an extension is not
desired then enter the name as NAME. with a period on
the end.
If a configuration file that matches the name of the
program (i.e. TSDEMO.CFG for the demo program) is found
when TimeStack starts up, that configuration is
automatically loaded.
Put
The current TimeStack configuration is saved in this
file. The configuration file name entered here is the
same name used in the menu File | Get described above.
The configuration file is given a default extension of
.CFG if no extension is entered. If an extension is not
desired then enter the name as NAME. with a period on
the end.
The configuration is automatically saved if the
automatic configuration save feature is active in the
Options | 1. Config menu and there is a configuration
file name specified.
Analysis
ALT-A The start and stop addresses of the analysis to be done
are entered here. The cursor starts out on the top line
which is the start address. The hexadecimal start
address obtained from the program listing is entered
here.
14 TimeStack User's Guide Chapter Two - Menus and Windows
Pressing Enter moves to the stop address on the next
line. A hexadecimal stop address determined by
inspecting the program listing is entered. If the
analysis is on a procedure that finishes with a return
from subroutine instruction, enter a hexadecimal value
that contains all F's such as FFFF. The analysis will
automatically stop when it finds a return from
subroutine instruction. Pressing Esc from this line
restores the previous value and moves the cursor back
up to the start address line.
Once the analysis has started, it may be aborted by
pressing Esc. This causes a prompt to appear that asks
if you really want to abort.
Edit
ALT-E A prompt for the address of an instruction to be edited
is given.
The instructions that may be edited are conditional
branches, jumps to subroutines, jumps indirect, and
jumps to subroutines indirect. The type of instruction
will determine which menu is displayed next.
Conditional branches
The menu for conditional branches have the choices
Take, Fall, Normal, or Delete. The options Take and
Fall will prompt for a number that indicates how many
times to take or fall through a conditional branch. A
value of zero indicates that the branch should always
be taken or always fall through.
Jump to subroutine
The menu for jumps to subroutines and jumps to
subroutines indirect allow the maximum number of cycles
and maximum stack depth to be entered. The maximum
number of cycles will also be used for the minimum
number of cycles in the analysis and the outcome in the
Analysis Result window will be flagged to indicate the
minimum number of cycles and worst case stack depth may
not be accurate.
The largest value that may be entered for the maximum
number of cycles on a jump to subroutine is 65535. If
this proves to be a limitation it may be possible to
set its value to zero during the analysis and add the
desired maximum number to the result afterwards.
15 TimeStack User's Guide Chapter Two - Menus and Windows
Jump indirect
The menu for jump indirect first displays the option to
handle the jump indirect exactly as it would a return
from subroutine instruction. If this is not chosen then
the address that should be jumped to is prompted for.
Clear
ALT-C It is possible to clear nodes in the Special Nodes
window one at a time using the Edit menu but this is
time consuming. This option allows clearing all nodes
from the given starting address through the given
ending address inclusive.
Disasm
ALT-D The Disassembly window needs to know where to start
when it disassembles a portion of the program. Enter
the starting address for disassembly here.
Options
ALT-O There are many different options available so that you
may customize your operation of TimeStack.
Type of processor
The type of processor is picked in this menu. This can
have an effect on what opcodes are illegal and how many
clock cycles an opcode uses. Some processor families
have a large number of choices. This may mean a
difference in timing characteristics or it may just
allow the specific processor name to be chosen for
display purposes. Appendix D will indicate the reason.
Any time a processor is picked, the clock divisor value
is reset to a default value for that processor. See
the Options | Divisor menu.
Clock rate
The clock rate of the processor is entered here. This
is used to calculate how many microseconds the maximum
and minimum execution times are in the Analysis Results
window.
16 TimeStack User's Guide Chapter Two - Menus and Windows
The number entered is in megahertz. It must be between
0 and 200 MHz. It is a floating point number with at
least five digits of accuracy. It may be entered as a
regular number or using scientific notation.
Divisor for clock
Every processor has a factor that the external clock
input is divided by. The external clock is divided by
this value to obtain an internal clock that is referred
to as the cycle time.
Most processors have a fixed value for this internal
divisor and this may be found in Appendix D. This
default value may be changed using this menu. Normally
this would only be done if the processor has a special
customized selection for different divisors.
This value is reset to a default value any time a
processor is selected using the Options | Type menu.
The number entered must be between 0 and 256. It is a
floating point number with at least five digits of
accuracy. It may be entered as a regular number or
using scientific notation.
Get
You may get additional information on the current state
of TimeStack. This includes file names, current
processor type, clock rate, clock divisor, and memory
available.
1. Config
This option allows the configuration to be saved
automatically when the Quit menu is invoked.
2. Node
This option allows the node list to be saved
automatically when the Quit menu is invoked.
Print
ALT-P The information obtained from the analysis may be saved
in a file on disk or sent to a printer.
17 TimeStack User's Guide Chapter Two - Menus and Windows
Comment
A line at the top of the printed information may
optionally contain a comment. That line is entered here
and it remains until replaced with another line.
1. Path to File
Outputs the current analysis results, maximum
execution, minimum execution, and stack depth paths to
a file. This file is usually saved for printing later.
2. Disasm to File
Outputs the disassembled program to a file that is
usually saved for printing later. The range that is
disassembled begins at the analysis start address and
finishes at the analysis end address.
3. Path to Printer
Same as Print | 1. Path to File except the output is
directed to the DOS print device PRN.
Before the printing starts, a message is displayed that
says to prepare the printer. When the printer is ready
press Enter.
To abort the print before it begins press Esc.
When Enter is pressed another message is displayed that
indicates printing is in progress. Esc may also be
pressed at any time to halt the printing.
A warning is displayed if a problem is encountered
communicating with the printer. Typically this is some
simple condition such as turning the printer on,
checking to see that it has paper, and that it is on-
line. Press Enter to try again after the problem has
been fixed. Printing may also be aborted at this point
by pressing Esc.
4. Disasm to Printer
Same as Print | 2. Disasm to File except the output is
directed to the DOS print device PRN.
The printer operation is the same as 3. Path to
Printer.
18 TimeStack User's Guide Chapter Two - Menus and Windows
Quit
ALT-Q Quit the TimeStack program. If the Special Nodes have
been modified in any way and the save special nodes
automatically feature is not active, a prompt is given
to ask if the information should really be saved.
Windows
The majority of the screen contains six windows. These
windows display a variety of information about the
analysis. One displays the results of the most recent
analysis. Other windows show the paths that were taken
to achieve those results. Another window contains a
list of all nodes that have been programmed and the
last displays the disassembled program.
Selecting a window
Each of the six individual windows may be selected at
any time. A selected window has a border with two lines
around it. All other windows have a single line. In
Figure 2-1 on page 10, window 1 - Special Nodes is
currently selected.
To select another window, press F3, F4, or ALT-1
through ALT-6. The key F3 makes the next window active,
F4 makes the previous window active, and ALT-1 through
ALT-6 selects the corresponding window by its number
directly.
Some windows selected may be able to scroll using the
cursor keys. See the specific description of the
windows below.
Moving and sizing a window
To move or size a window, press F6. This activates a
mode that allows the window to be moved or sized using
the Cur Up and Cur Dn keys. Pressing End toggles into
and out of a mode that allows changing the size of a
window. Press End once to enter the change size mode.
Use the Cur Up and Cur Dn keys to move the lower right
hand corner of the window to make it the desired size.
Press End to toggle back into the move window mode or
press F6 when the window is in the location and size
desired.
19 TimeStack User's Guide Chapter Two - Menus and Windows
Display of subroutines
Conditional branches inside of subroutines called with
a jump subroutine instruction are not displayed to
avoid clutter. If the branching information for a
subroutine is desired then the subroutine may be
analyzed separately.
Windows Displayed
These are the windows that may be displayed.
1 - Special Nodes
This window displays the current list of special nodes.
A node is a conditional branch, a subroutine call, or a
jump, branch or subroutine call that uses an indirect
addressing mode.
Each entry in the list of special nodes displays its
position in the list, the address where it is located,
the disassembled mnemonic, and any special settings it
may have such as TAKE or FALL.
This information may be saved and restored from the
menu File | Save and File | Restore.
The keys Home, CTRL-Home, End, CTRL-End, Pg Up, Pg Dn,
Cur Up, Cur Dn, CTRL-Pg Up, CTRL-Pg Dn, F2, and F6 work
as described in Special Keys when this window is
selected.
2 - Disassembly
This window displays a disassembled portion of the
currently loaded program starting at the given address.
It is not possible to page in front of the address
entered to begin disassembly. This is because it is
impossible to figure out where opcode boundaries are
when moving backwards.
The keys Home, CTRL-Home, End, CTRL-End, Pg Up, Pg Dn,
Cur Up, Cur Dn, CTRL-Pg Up, CTRL-Pg Dn, F2, and F6 work
as described in Special Keys when this window is
selected.
20 TimeStack User's Guide Chapter Two - Menus and Windows
If the window is made wider it is possible to see
additional information about each instruction. There
are three columns that contain the following
information in this order:
* number of bytes,
* number of cycles, and
* amount of stack used.
3 - Analysis Results
The Analysis Results window shows the results from the
most recent analysis that has been run. It displays the
start address entered. The stop address displayed is
either the one entered or the one found.
The number of bytes is useful for quickly determining
the size of a procedure. The number of bytes is
calculated as:
Stop address - Start address + opcode size at Stop
address
The maximum and minimum cycle time differences are
caused by conditional branches. The minimum cycle time
is flagged with a + if any conditional branches that
are forced to always take or fall through or a user
defined jump to subroutine is encountered.
The maximum stack depth is flagged with a + if any
conditional branches that are forced to always take or
fall through are encountered. The stack depth now shows
the current stack pointer. It should normally show -2
after timing a subroutine ending with a return from
subroutine.
4 - Maximum Execution
This window shows the worst case execution path from
the most recent analysis.
The keys Home, CTRL-Home, End, CTRL-End, Pg Up, Pg Dn,
Cur Up, Cur Dn, CTRL-Pg Up, CTRL-Pg Dn, F2, and F6 work
as described in Special Keys when this window is
selected.
21 TimeStack User's Guide Chapter Two - Menus and Windows
5 - Minimum Execution
This window shows the best case execution path from the
most recent analysis.
The keys Home, CTRL-Home, End, CTRL-End, Pg Up, Pg Dn,
Cur Up, Cur Dn, CTRL-Pg Up, CTRL-Pg Dn, F2, and F6 work
as described in Special Keys when this window is
selected.
6 - Stack Depth
This window shows the worst case stack depth path from
the most recent analysis.
The keys Home, CTRL-Home, End, CTRL-End, Pg Up, Pg Dn,
Cur Up, Cur Dn, CTRL-Pg Up, CTRL-Pg Dn, F2, and F6 work
as described in Special Keys when this window is
selected.
Special Keys
Some keys perform a specific function. They include
function keys and hot keys.
Function keys
The function keys with a special purpose are:
F1 Obtains context sensitive on-line help. A window in the
middle of the screen is opened and additional
information relating specifically to the current menu
selection or error message is given.
F2 Pulls down the Edit menu ready to edit the instruction
located at the address that is positioned on the top
line of the currently selected window. This allows for
quickly changing something that was located while
browsing the special nodes, disassembled program, or
one of the three paths.
F3 Moves the currently selected window to the next one in
numerical order.
F4 Moves the currently selected window to the previous one
in numerical order.
F5 Reserved for future use.
22 TimeStack User's Guide Chapter Two - Menus and Windows
F6 Allows moving the current window around and changing
its size on the screen.
Hot keys
Hot keys allow quick movement to a specific menu. All
of the items on the main menu can be reached by
pressing ALT followed by its first letter. The
currently defined hot keys are:
ALT-A Analysis
ALT-C Clear
ALT-D Disasm
ALT-E Edit
ALT-F File
ALT-L File | Load
ALT-O Options
ALT-P Print
ALT-Q Quit
ALT-R File | Restore
ALT-S File | Save
ALT-1 - ALT-6 Select the window with that number.
Other keys
Home Moves the current line to the beginning in the selected
window. When entering a filename, text, or number, it
moves the cursor to the first character in the line and
no longer affects the selected window.
CTRL-Home Moves the current line to the beginning in the selected
window.
End Moves the current line to the end in the selected
window. When entering a filename, text, or number, it
moves the cursor to the last character in the line and
no longer affects the selected window.
23 TimeStack User's Guide Chapter Two - Menus and Windows
CTRL-End Moves the current line to the end in the selected
window.
Pg Up Moves the current line in the selected window up one
full window's worth.
Pg Dn Moves the current line in the selected window down one
window's worth.
Cur Up Moves the current line in the selected window up one
line. If a pull down menu is active, the highlight bar
will move to the previous item instead of affecting the
selected window.
CTRL-Pg Up Moves the current line in the selected window up
one line.
Cur Dn Moves the current line in the selected window down one
line. If a pull down menu is active, the highlight bar
will move to the next item instead of affecting the
selected window.
CTRL-Pg Dn Moves the current line in the selected window down
one line.
Ins Toggles insert mode when entering data.
Del Deletes the character at the cursor position.
Backspace Deletes the character just in front of the cursor.
Cur Left Moves the cursor left one character.
Cur Right Moves the cursor right one character.
On-Line Help
On-Line help is available at any time by pressing F1.
This opens the help window which will contain
additional context sensitive information on the current
menu item.
Pressing F1 again or pressing Esc will exit the on-line
help.
If the description is large enough it may be necessary
to use Pg Up and Pg Dn to see all of it.
24 TimeStack User's Guide Chapter Three - Understanding TimeStack
Chapter Three - Understanding TimeStack
Explaining assembly language programming is beyond the
scope of this guide. The reader should already be
familiar with assembly language programming. Detail is
provided in some areas so that programmers familiar
with only one microprocessor may understand the
examples and demo program that have been provided.
Assembly Language Formats
Throughout this User's Guide there are many references
to, and examples of, assembly language programs.
Different manufacturers of microprocessors and
providers of assemblers have their own nuances when it
comes to the style of the assembly language source
code.
The format that a particular assembler uses for its
source code is of no consequence to TimeStack. It looks
only at the generated hex data output of the assembler
and accepts Intel or Motorola hex files.
This guide will use the following format in its
examples of assembly language programs:
* a label must be terminated by a colon and begin in
column one,
* the opcode field never starts in column one,
25 TimeStack User's Guide Chapter Three - Understanding TimeStack
* there must be at least one space between the opcode
field and the operand field, and
* comments must begin with a semicolon.
All examples in this guide will use the Motorola 6800
assembly language mnemonics because it is generally
well known. Many of the other Motorola microprocessors
have similarities in mnemonics. Programmers of Intel
and other families of microprocessors should have no
problem understanding the concepts that the simple
examples will be showing.
Figure 3-1 is an example of a typical listing. The
first column is a line number. The second column is the
address that the instruction is located at. The next
bytes of data are the machine code for the opcode on
that line.
000001 0000 ; Test procedure
000002 0000 ;
000003 0000 TEST:
000004 0000 8100 CMPA #0
000005 0002 2701 BEQ SKIP
000006 0004 4F CLRA
000007 0005 39 SKIP: RTS
Figure 3-1 Typical Assembly Language Listing
Differences in mnemonics
There are probably as many different mnemonics as there
are different processor families. Here is a table of
the nomenclature used in this manual along with some of
the common processors available for TimeStack.
26 TimeStack User's Guide Chapter Three - Understanding TimeStack
MOTOROLA INTEL
DESCRIPTION 6800 / 6805 8051 / 8048
Jump JMP JMP
Jump indirect JMP 0,X JMP @A+DPTR
Jump subroutine JSR CALL
Jump subroutine indirect JSR 0,X
Return subroutine RTS RET
Branch relative BRA JMP
Conditional branch if zero BEQ JZ
Conditional branch if not BNE JNZ
zero
Many of the other opcodes have similar minor
differences.
Demo program limitations
The demonstration program that is included with
TimeStack is based on the Motorola 6811 processor. Some
things have been removed to make it smaller and thus it
has the following limitations:
* The opcodes that manipulate the B or D registers
have been removed.
* Any special opcodes such as MUL have been removed.
Hex Files
TimeStack reads the hex file that represents a program
for use in its analysis. A hex file contains the ASCII
representation of bytes of information. Using a hex
file to save binary information that is loaded at
specific memory addresses is beneficial for a couple of
reasons. First, the starting address that a block of
data should be located is included. Second, each line
has a checksum. Third, a hex file is human readable.
The hex file name is entered on the File | Load menu.
There are many different hex file formats. The two most
popular formats are referred to as Motorola Hex and
Intel Hex.
TimeStack looks at the hex file and attempts to
determine if it is a Motorola or Intel hex file based
on the first couple of characters in each record. The
checksum is calculated and checked for each record. The
record is loaded into TimeStack and placed in a virtual
27 TimeStack User's Guide Chapter Three - Understanding TimeStack
memory area at the address specified for it by the
record.
Motorola hex files
Motorola hex files are composed of records. There is
one record per line. Each line begins with the letter S
and are thus often referred to as S records. The next
letter is a number that indicates the type of S record.
Each byte of data is represented by two hex digits. The
first byte is the number of bytes that follow and its
value does not count itself. The next two bytes
represent a 16-bit address where the data bytes in the
current record should be located. The address is
followed by the data bytes. The last byte in the record
is the checksum and its value is calculated such that
the sum of all bytes in the record when truncated to a
one byte value have the hexadecimal value of FF.
If you were to look at an S record it might look
something like this.
S10D10500501014A26FC0926F839BF
Separating this into its different fields makes it
easier to see.
S1 0D 1050 05 01 01 4A 26 FC 09 26 F8 39 BF
S1 is the record type, 0D is the number of bytes (14
decimal), 1050 is the address that the data bytes 05,
01, ... 39 are placed, and BF is the checksum.
Intel hex files
Intel hex files are also composed of records, one
record per line. Each line begins with a colon. Each
byte of data is represented by two hex digits. The
first byte is the number of data bytes. That is
followed by two bytes that form a 16-bit address where
the data bytes should be placed. The next byte is the
record type. This is followed by the data bytes. Last
is the checksum, its value calculated so that the sum
of all bytes in the record comes out to a value of zero
when truncated to a single byte.
If you were to look at an Intel record it might look
something like this.
28 TimeStack User's Guide Chapter Three - Understanding TimeStack
:0A0860006300FF63FF0063FFFF2247
Separating it into its different fields results in
this.
: 0A 0860 00 63 00 FF 63 FF 00 63 FF FF 22 47
Where 0A is the number of data bytes (10 decimal), 0860
is the address that the data bytes 63, 00, ... 22 are
placed, and 47 is the checksum.
Possible errors
The possible errors loading a hex file are:
* The file may not appear to be a hex file. This could
be cause by the first character in each line not
being the letter S or a colon.
* The checksum is incorrect. This would indicate a
fundamental problem with the hex file, perhaps a
problem in copying at some point or corrupt data.
Program Listings
A program listing is required to do an analysis with
TimeStack. Program listings are produced by an
assembler. They show the absolute locations of the
generated object code for each assembly language
instruction.
They are needed because these addresses are entered by
the user so that analysis may take place.
Configuration Files
Configuration files are used to save information about
TimeStack that is useful to restore when TimeStack is
executed in the future. Some of the things saved in a
configuration file are:
* Start and stop addresses
* Window size and location on the screen
* Processor type selected, clock rate, and clock
divisor.
29 TimeStack User's Guide Chapter Three - Understanding TimeStack
The default name for a configuration file is the name
of the TimeStack executable with .CFG as an extension.
Thus, for the demo program the default name would be
TSDEMO.CFG. If the default configuration file is found
in the current working directory when TimeStack starts
up, it is automatically loaded.
Node Files
Node files contain the information displayed in the
Special Nodes window. They are useful for saving any
special conditional branch setups or jump subroutine
instruction override information.
The file name is automatically given the extension .NOD
if none has been entered.
Temporary Files
Temporary files are created in the current working
directory when TimeStack runs. At least 50K of free
disk space is needed to hold them.
The names of the temporary files created while running
are: MAXDATA.TMP, MINDATA.TMP, and STKDATA.TMP.
If there is no space to hold these files a fatal error
message is displayed and TimeStack returns to DOS.
Start and Stop Addresses
The start and stop addresses are considered to be
inclusive in the analysis. They may also be the same
value, in which case only the single instruction at
that address is analyzed. If the instruction at the
stop address is a jump subroutine, the subroutine will
be included in the analysis results.
Even though the stop address may be less that the start
address, there are few, if any, practical reasons to do
this. Most processors and programs have a flow of
execution that moves toward increasing address values.
A stop address composed of all F's is special.
It tells TimeStack to look for a return from subroutine
instruction and stop the analysis when it is
encountered. The stop address and size of the procedure
30 TimeStack User's Guide Chapter Three - Understanding TimeStack
displayed in the Analysis Results window will
automatically be determined.
Timing Concepts
A program is composed of a series of sequential
statements. These statements are executed by the
processor one at a time in a linear fashion, sequencing
through program memory. The length of time it takes to
execute any given series of statements is calculated as
the sum of each instruction's execution time.
The linear processing of statements may be interrupted
by special instructions called branches or jumps. In
the simple case, the linear flow changes to another
address location in program memory and continues its
linear flow.
It is the job of TimeStack to look at every possible
combination of these paths to obtain the results of the
analysis.
Conditional Branches
Processors have a special instruction called a
conditional branch that allows them to make a choice
between one of two paths to take. The linear flow
through a conditional branch may continue and FALL
through, or the processor may TAKE the conditional
branch and disrupt the flow. In TimeStack a branch is
NORMAL when both directions are analyzed.
TimeStack looks at the flow of execution from a given
starting address in program memory to a given stop
address in program memory. The analysis determines what
combination of TAKEs and FALLs gives the absolute worst
case theoretical time possible and shows this path. It
also shows the best (or fastest) time and its path. It
also shows the worst case stack depth usage and its
path.
Take
A conditional branch has an address associated with it.
When the branch is taken, program execution continues
at this address.
31 TimeStack User's Guide Chapter Three - Understanding TimeStack
The number of times a branch is taken before it falls
though may be associated with a conditional branch. A
branch may also be forced so that it is always taken.
Fall
If a conditional branch is not taken, it must fall
through. Program execution continues with the
instruction immediately following the conditional
branch when it falls through. The number of times a
branch falls through before it is taken may also be
associated with a conditional branch. A branch may be
forced to always fall through.
Normal
A branch that has no special conditions associated with
it such as take or fall is considered to be normal.
Conditional branches that move backwards might be part
of a loop. To indicate to TimeStack that this is not
the case, they may be set to normal.
Program Loops
A loop is only possible if some type of backwards
branching occurs. TimeStack is not a simulator and has
no knowledge of the possible implications of a
backwards branch. If the backwards branch causes some
type of loop to be formed, the user must assist the
TimeStack and give more information about the loop.
The user tells TimeStack how a conditional branch
should operate in special situations. This is done by
indicating how many times a conditional branch should
FALL through before taking a branch or how many times
to TAKE the branch before falling through.
!! -> A conditional branch may be set to TAKE (take the
branch), FALL (fall through the branch), and NORMAL
(try both take and fall paths). In addition, TAKE and
FALL may be set to a number that indicates how many
times to take a branch before falling through or how
many times to fall through before taking the branch.
A conditional branch may be said to TAKE 5 times. This
means TimeStack would not look at the path that falls
through until it has followed the path the branch takes
five times.
32 TimeStack User's Guide Chapter Three - Understanding TimeStack
A NORMAL conditional branch is one that branches
backwards yet is not actually a part of a loop.
The conditional branch in Figure 3-2 would be set to
TAKE 26 times. This is one less that the actual number
of times the loop is done because the 27th time through
the loop, the branch is not taken but falls through.
000001 0006 ; Loop type 1
000002 0006 ;
000003 0006 861B LDAA #27
000004 0008 6F00 LOOP1: CLR 0,X
000005 000A 08 INX
000006 000B 4A DECA
000007 000C 26FA BNE LOOP1
000008 000E 39 RTS
Figure 3-2 Loop with Exit at Bottom
The conditional branch in Figure 3-3 would be set to
FALL 27 times. That is because the increment of the
loop counter is done after the conditional branch test.
000001 000F ; Loop type 2
000002 000F ;
000003 000F CE0000 LDX #0
000004 0012 8C001B LOOP2: CPX #27
000005 0015 2705 BEQ DONE
000006 0017 6F00 CLR 0,X
000007 0019 08 INX
000008 001A 20F6 BRA LOOP2
000009 001C 39 DONE: RTS
Figure 3-3 Loop with Exit in the Middle
33 TimeStack User's Guide Chapter Three - Understanding TimeStack
Look at these examples very closely. Understanding how
many times to specify a branch to TAKE or FALL is very
important. This information is entered using the Edit
menu and specifying the address of the conditional
branch.
Subroutines
The processor instructions that jump, branch, and jump
subroutine change the execution path. If a jump or
branch is backwards, then there is the possibility of
an infinite loop. In these cases the user is given the
chance to edit the special node information which
usually means setting up a conditional branch to TAKE
or FALL some number of times.
Warning If a jump subroutine is encountered, then it is assumed
that a return from subroutine will be found. The stop
address is ignored during the jump to subroutine. When
a return from subroutine is found, TimeStack returns to
the location immediately following the jump subroutine
even if the return address on the stack was changed.
A maximum cycle time and stack depth may be associated
with any jump subroutine instruction. The values
entered will be used whenever that instruction is
encountered. This allows calls from different locations
in the program to the same subroutine to have different
maximum cycle times and stack depth values.
The value entered for maximum cycle time is also used
for the minimum cycle time. This causes the minimum
cycle time to be flagged (see Windows - Statistics).
Jump subroutine instructions that are indirect must
have the cycle time and stack depth information entered
for them. This is more versatile than entering a
destination address. The analysis will always include
the cycle time and stack depth of the jump subroutine
instruction itself. Thus, a value of zero for both the
cycle time and stack depth will only include the cycle
time and stack depth for the jump subroutine
instruction.
34 TimeStack User's Guide Chapter Three - Understanding TimeStack
Jump Indirect
Jump instructions that are indirect may have an address
associated with them. If none has been entered for
them, then a prompt for an address will be given on the
first occurrence of the instruction during analysis.
The option to pretend the instruction is a return
subroutine is also made. This is useful for subroutines
that pull the return address and use it at a later time
as shown in Figure 3-4
000001 001D ; Jump indirect used
000002 001D ; as return subroutine
000003 001D ;
000004 001D JMPIND:
000005 001D 01 NOP
000006 001E 38 PULX
000007 001F 6E00 JMP 0,X
Figure 3-4 Jump Indirect used as Return from
Subroutine
Stack Depth
When an analysis is done, the current stack depth is
assumed to be zero. As the analysis progresses there
may be instructions that modify the stack by pushing
and pulling data. If any instructions that modify the
stack pointer directly are encountered, the resulting
values from the analysis will not be correct.
35 TimeStack User's Guide Chapter Four - Tutorial
Chapter Four - Tutorial
Using TimeStack is usually as simple as specifying the
starting address of a subroutine. It can analyze the
complete control function of a complex algorithm that
takes hundreds of milliseconds to execute as easily as
it handles checking how many microseconds a multiply
function takes to run.
This will be a short look at a typical analysis. The
executable program and files used here are included
with TimeStack. Just start at the beginning here and
work your way through one step at a time.
Look at Listing
The first step should be to look over a listing of the
program to get an understanding of what it does. The
program in Appendix A is a nonsense program that only
provides routines for learning about TimeStack. The hex
file that matches this listing is called: DEMO.HEX.
Invoking Program
The program is invoked by changing to the TimeStack
directory and typing the name of the program that
corresponds to the processor family desired. To run the
correct program for the demo type:
TSDEMO.
36 TimeStack User's Guide Chapter Four - Tutorial
Configuring TimeStack
The first time TimeStack is entered it will be
necessary to configure it. Choose the Options menu by
pressing the letter O from the main menu or the hot key
ALT-O from any place in the program.
The submenu Type allows selection of the specific
processor. Press T to select this item or press Enter
since the highlighted menu bar is already on the item.
In this case there is no choice to make. The demo
program knows only one type of processor, the 68DEMO.
Press 1 to select it specifically, Enter to choose the
currently selected item, or Esc to abort any changes.
The submenu Clock allows entering the clock rate of the
processor that will be used. Use the Cur Dn key to
select this item and press Enter or just press the
letter C as a shortcut. To obtain the same results that
will be shown here be sure the value is set to 1 which
means 1.0 megahertz.
The submenu Get information displays a variety of
information. At the top is the current version of the
TimeStack program. Also shown is the currently selected
processor, clock rate, and clock divisor. The current
working directory and all file names that have been
entered or have default values are given. The amount of
available memory for use in analysis is shown.
It is usually desirable to save any work that has been
done. This may be set up to be done automatically upon
exit. Use the submenu 1. Configuration to have the
configuration automatically saved. Use the submenu 2.
Node list to have the special node list automatically
saved. Enable both of these options by answering Yes at
their prompts.
Load the Hex File
Press ALT-L to jump right to the File | Load menu. At
the prompt for the hex data file name, enter DEMO. This
is the name of the demonstration hex file and the
extension .HEX will automatically be added.
Immediately after pressing Enter, a box is displayed in
the center of the screen. It indicates that it is
loading the hex file. The box disappears after the hex
file is loaded.
37 TimeStack User's Guide Chapter Four - Tutorial
Timing Subroutines
Press ALT-A to move quickly to the Analysis menu.
Figure 4-1 shows the procedure to be analyzed. For the
start address type in 2A and press Enter. Note that
leading zeros on addresses do not need to be entered.
For the stop address leave the FFFF that is already
there and press Enter again. This tells the TimeStack
to analyze the procedure called SIMPLE that starts at
address 002A and to stop when a return from subroutine
instruction is encountered.
000021 002A ; Simple subroutine
000022 002A ;
000023 002A ; no conditional branches.
000024 002A ;
000025 002A ; 11 min 11 max 0 stack
000026 002A ;
000027 002A SIMPLE:
000028 002A 40 NEGA
000029 002B 48 ASLA
000030 002C 8B05 ADDA #5
000031 002E 39 RTS
Figure 4-1 Simple Subroutine
The Analysis Results window will show that this small
procedure took a minimum of 11 CPU internal clock
cycles, a maximum of 11 cycles, and a maximum stack
depth of 0 bytes of stack. Notice that the stack depth
now indicates -2 bytes. This represents the stack
pointer right now after the analysis has finished. It
means nothing was left remaining on the stack. In fact,
two bytes have been pulled off that were not pushed on
during the analysis. This is caused by the return from
subroutine instruction pulling its two bytes of address
information off of the stack.
38 TimeStack User's Guide Chapter Four - Tutorial
The actual stop address was found for us. The
subroutine ranges from 002A to 002E. Its size was 5
bytes.
Using a 1 Megahertz external clock this subroutine will
execute in an absolute worst case maximum time of 44.0
microseconds. This includes the time from the start of
the first instruction until the return from subroutine
instruction finishes.
Timing Subroutines with Conditional Branches
From now on it will be assumed that you are familiar
with how to analyze a procedure from the Analysis menu.
If you are not, review the previous section again. The
stop address for most of the examples will be left at
FFFF.
Now analyze the procedure called FWDBRA. Figure 4-2
contains this procedure. It has a start address of
002F. The results of this analysis have put some
information in the Maximum Execution, Minimum
Execution, and Stack Depth windows. It shows that to
obtain the maximum execution time the conditional
branch at 0030 must FALL through, the branch at 0036
must TAKE, and the last branch at 003E must FALL
through. Only conditional branches are shown because
they are the only opportunity to change program flow.
39 TimeStack User's Guide Chapter Four - Tutorial
000032 002F ; Forward branches
000033 002F ;
000034 002F ; only forward branches.
000035 002F ;
000036 002F ; 16 min 26 max 0 stack
000037 002F ;
000038 002F FWDBRA:
000039 002F 47 ASRA
000040 0030 2406 BCC FWD010
000041 0032 CE002A LDX #SIMPLE
000042 0035 47 ASRA
000043 0036 2405 BCC FWD020
000044 0038 FWD010:
000045 0038 CE002F LDX #FWDBRA
000046 003B 2006 BRA FWDRET
000047 003D FWD020:
000048 003D 47 ASRA
000049 003E 2403 BCC FWDRET
000050 0040 CE0044 LDX #BCKBRA
000051 0043 FWDRET:
000052 0043 39 RTS
Figure 4-2 Forward Branches
It should be mentioned that the paths shown by
TimeStack only represent one way to achieve the
analysis results. There may be others that are equal
but not shown.
The next procedure is called BCKBRA. This is shown in
Figure 4-3. Begin the analysis by entering its start
address of 0044. Any branch that has a destination
which can move the execution backwards creates the
possibility of forming a loop. The Edit Branch window
is opened on the branch at 0054. The edit window
indicates the branch is CLEAR because it has not had
any attributes set. This branch does not participate in
forming any kind of loop. It merely branches backwards
to a return from subroutine instruction. Of the four
possible choices, choose Normal for this branch.
40 TimeStack User's Guide Chapter Four - Tutorial
000053 0044 ; Backward normal branches
000054 0044 ;
000055 0044 ; all normal branches.
000056 0044 ;
000057 0044 ; 16 min 26 max 0 stack
000058 0044 ;
000059 0044 BCKBRA:
000060 0044 47 ASRA
000061 0045 2407 BCC BCK010
000062 0047 CE002A LDX #SIMPLE
000063 004A 47 ASRA
000064 004B 2406 BCC BCK020
000065 004D BCKRET:
000066 004D 39 RTS
000067 004E BCK010:
000068 004E CE002F LDX #FWDBRA
000069 0051 20FA BRA BCKRET
000070 0053 BCK020:
000071 0053 47 ASRA
000072 0054 24F7 BCC BCKRET
000073 0056 CE0044 LDX #BCKBRA
000074 0059 39 RTS
Figure 4-3 Backwards Branches that are Normal
The analysis continues to run but now issues a warning
about a backwards branch at 0051. This branch, since it
also moves backwards, may be forming part of a loop.
Upon inspection it is seen that this is not the case.
Press any key to remove the warning and then respond to
the edit branches now prompt with a No.
The Special Nodes window now displays the conditional
branch that was entered during the analysis.
Timing Loops
Simple loop
The procedure SIMPLOOP at address 005A shown in Figure
4-4, forms a simple loop. Begin the analysis of this
41 TimeStack User's Guide Chapter Four - Tutorial
procedure. The conditional branch at 005E will be
pulled up during the analysis. In order to determine
what should be entered it will be necessary to look at
the program logic. In this case, it looks as if the
code inside the loop should be executed five times. To
achieve this the conditional branch will be taken four
times. The fifth time through the loop the branch falls
through. At the prompt for the branch choose Take. At
the prompt for the number of times enter 4.
000075 005A ; Simple loop
000076 005A ;
000077 005A ; A simple loop.
000078 005A ;
000079 005A ; 42 min 42 max 0 stack
000080 005A ;
000081 005A SIMPLOOP:
000082 005A 8605 LDAA #5
000083 005C SIMP010:
000084 005C 01 NOP
000085 005D 4A DECA
000086 005E 26FC BNE SIMP010
000087 0060 39 RTS
Figure 4-4 Loop with Exit at Bottom
When the analysis is complete press ALT-4. This selects
the Maximum Execution Window (window number four). Use
the Cur Up and Cur Dn keys to look at all of the
entries. Follow the loop through and see how it works.
Understanding this is very important when configuring a
loop.
Loop with middle exit
The procedure BACKLOOP at address 0061 shown in Figure
4-5 is another common type of loop. It has its exit
near the top or middle. Begin the analysis. TimeStack
will warn that the branch at address 0067 is backwards
and ask if you want to edit branches at this time.
42 TimeStack User's Guide Chapter Four - Tutorial
Answer with a Yes. It is necessary to inspect the
program to determine which conditional branch must be
configured to exit the loop. The branch at address 0064
is the correct one for this example. It must be set to
Fall through five times. Understanding this type of
loop is also very important.
000088 0061 ; Loop with backwards branch
000089 0061 ;
000092 0061 ;
000093 0061 ; 62 min 62 max 0 stack
000094 0061 ;
000095 0061 BACKLOOP:
000096 0061 8606 LDAA #6
000097 0063 BACK010:
000098 0063 4A DECA
000099 0064 2703 BEQ BACKRET
000100 0066 01 NOP
000101 0067 20FA BRA BACK010
000102 0069 BACKRET:
000103 0069 39 RTS
Figure 4-5 Loop with Middle Exit
Printing the Results
The results of this analysis may be sent to a printer.
Be sure the printer is turned on, loaded with paper,
and on-line. The output is sent to the DOS print device
PRN.
Press ALT-P to select the Print menu and then press 3.
Path to Printer. A message will appear the says to
prepare the printer. When the printer is ready, press
Enter. The printing will then begin immediately. A
message is displayed that indicates printing is in
progress. Esc may be pressed during this time to abort.
If there is a problem communicating with the printer, a
message will be displayed indicating what is wrong.
43 TimeStack User's Guide Chapter Four - Tutorial
After corrective action is taken press Enter to
continue. Esc may be pressed to abandon the print.
Quitting the Program
Now quit the program by pressing ALT-Q. TimeStack will
attempt to save the special node list but since a node
list file name has not been entered yet it will as if
you wish to save your changes. Answer Yes to this
question and enter whatever name you wish to give the
node list. If you do not enter an extension, .NOD will
automatically be added.
44 TimeStack User's Guide Chapter Five - Timing Strategies
Chapter Five - Timing Strategies
Have a Listing Ready
It is very impractical to use TimeStack without a
current listing of the program to be worked on. It is
possible to use the Disassemble feature to assist but
this is still difficult. A listing provides all of the
addresses that will need to be entered as start
addresses and when editing conditional branches. It
will be needed to determine how many times to take
loops and destination of indirect jumps.
What Units to Use
All timing information is given in cycles. This refers
to the processor's internal cycles as defined by the
manufacturer of the device. For convenience, this
number is calculated to microseconds based on the given
external clock rate divided by the clock divisor value.
All memory usage is defined in bytes. A byte is eight
bits of information and is a fundamental unit to all
processors handled by TimeStack. All stack usage is
measured in bytes.
Start Small
It is usually best to start with the smaller
subroutines that may be called from throughout the
45 TimeStack User's Guide Chapter Five - Timing Strategies
program. This way, many of the loops will be discovered
early without having to search through the listing.
Look at the different paths (maximum cycles, minimum
cycles, and worst case stack depth) and follow them
through the listing a couple of times to develop a feel
for the program. Compare the results on subroutines
that have been timed and documented before.
Be Realistic
The worst case path may not be realistic and you may
desire to force a few branches to avoid this. This
usually happens when the logic gets divided into
multiple parts or spread out. It also happens when the
same condition is checked numerous times throughout the
program.
Figure 5-1 is a simple example of this. In the first
part of the logic the NOP instruction will be executed
if register A is not equal to zero. In the second part
of the logic the NOP instruction will be executed if
accumulator A is equal to zero. Obviously both NOPs
could not be executed during the same pass through the
procedure. TimeStack does not detect this and the
maximum execution time will include the time for both
NOPs. In the same way, the minimum execution time will
not time either NOP.
000001 0000 ; Unrealistic worst case path
000002 0000 ;
000003 0000 UNREAL:
000004 0000 8100 CMPA #0
000005 0002 2701 BEQ SKIP1
000006 0004 01 NOP
000007 0005 SKIP1:
000008 0005 8100 CMPA #0
000009 0007 2600 BNE SKIP2
000010 0009 01 NOP
000011 000A SKIP2:
000012 000A 39 RTS
Figure 5-1 Unrealistic Worst Case Path
46 TimeStack User's Guide Chapter Five - Timing Strategies
It helps if this type of logic is located in a
subroutine. By forcing one of the branches to always be
taken, the realistic maximum execution time will be
found. Then if this procedure is subsequently called
from another procedure the expected results will be
found.
More Than One Path
It is possible that there is more than just the single
path shown by TimeStack that meets the maximum and
minimum execution time and maximum stack depth. Figure
5-2 is a simple example of a procedure that has
identical execution times no matter which path is
taken.
000013 000B ; Identical Paths
000014 000B ;
000015 000B IDENT:
000016 000B 8100 CMPA #0
000017 000D 2702 BEQ IDENT1
000018 000F 01 NOP
000019 0010 39 RTS
000020 0011 IDENT1:
000021 0011 01 NOP
000022 0012 39 RTS
Figure 5-2 Identical Worst Case Paths
As it turns out, in most cases this is not usually a
problem. If you attempt to optimize the given maximum
execution path and make changes to it, future analysis
will find the new resulting maximum execution paths.
47 TimeStack User's Guide Chapter Six - Advanced Tutorial
Chapter Six - Advanced Tutorial
There are many more subtle points that need to brought
out to use the full capabilities of TimeStack and
obtain accurate results.
The complete program for all of the procedures here can
be found in Appendix A.
Invoke Program Again
Invoke the TimeStack demo program again. If you have
not already run the program at least once, see the
Chapter Four tutorial. Briefly this involves changing
to the TimeStack directory and typing in the demo
program name: TSDEMO.
If the demo hex file was not automatically loaded,
return to Chapter Four and review Invoking Program,
Configuring TimeStack, and Load the Hex File.
Complex Loops
A complex loop is one that TimeStack was not able to
correctly analyze. This occurs because the conditional
branch that was setup as the exit for the loop was not
the conditional branch that really is the exit for the
maximum execution path.
Analyze the procedure COMPLEX at address 006A shown in
Figure 6-1. The conditional branch at 0070 is brought
48 TimeStack User's Guide Chapter Six - Advanced Tutorial
up in the edit window because it is a backwards branch
and therefore may participate in a loop. Looking at the
algorithm it can be determined that this branch should
be set to TAKE 2.
000104 006A ; Complex loop
000105 006A ;
000106 006A ; A loop that will trigger the
000107 006A ; complex loop message.
000108 006A ;
000109 006A ; 43 min 43 max 2 stack
000110 006A ;
000111 006A COMPLEX:
000112 006A 8605 LDAA #5
000113 006C COMPL1:
000114 006C 4A DECA
000115 006D 2704 BEQ COMPX1
000116 006F 4A DECA
000117 0070 26FA BNE COMPL1
000118 0072 39 RTS
000119 0073 COMPX1:
000120 0073 BD0076 JSR COMPX2
000121 0076 COMPX2:
000122 0076 39 RTS
Figure 6-1 Complex Loop
During the analysis an error message is displayed. It
says that the branch at address 006D is involved in a
structure too difficult for a simple analysis.
Upon closer inspection of the branch at 006D and the
algorithm, it can be seen that the conditional branch
at 006D is the true exit for the loop. Press ALT-E to
pull up the Edit window, enter the address 006D, and
set it to FALL 2. Now when the analysis is run, it
completes with the correct answer.
49 TimeStack User's Guide Chapter Six - Advanced Tutorial
Indirect Jump
Indirect jumps are handled in a simple manner. They may
either be forced to act just like a return from
subroutine or you may enter an address to jump to.
Analyze the procedure INDJMP at address 0077 shown in
Figure 6-2. A message appears that says the indirect
jump at address 0077 needs a destination. After you
press Enter, you are asked if you would like to treat
the indirect jump like a return from subroutine. In
this example respond with No. A prompt for the
destination of the indirect jump is given. Use the
address 007A as the destination.
000123 0077 ; Indirect jump test
000124 0077 ;
000125 0077 ; Indirect jump that goes some
000126 0077 ; place and one that returns.
000127 0077 ;
000128 0077 ; 11 min 11 max 0 stack
000129 0077 ;
000130 0077 INDJMP:
000131 0077 6E00 JMP 0,X
000132 0079 01 NOP
000133 007A JMPRET:
000134 007A 38 PULX
000135 007B 6E00 JMP 0,X
Figure 6-2 Indirect Jump
Now the analysis stops at the indirect jump at 007B.
Respond with Yes when it asks if it should be treated
as a return from subroutine. The reason for this is the
algorithm in this example pulls the return address from
the stack and then uses the indirect jump to jump to
that return address at the end of the procedure. This
is exactly what a return from subroutine does and is a
special way that indirect jumps are used in programs
from time to time.
50 TimeStack User's Guide Chapter Six - Advanced Tutorial
Untimeable Instructions
Some instructions do not make sense to time. Start the
analysis of INSTIME at address 007D shown in Figure 6-
3. The analysis will stop with an error stating that
the opcode at 007F is not able to be analyzed for time.
000136 007D ; Instruction not timeable
000137 007D ;
000138 007D ; This can not be timed.
000139 007D ;
000140 007D ; 8 min 8 max 0 stack
000141 007D ;
000142 007D INSTIME:
000143 007D 2701 BEQ INST010
000144 007F CF STOP
000145 0080 INST010:
000146 0080 39 RTS
Figure 6-3 Instructions that can not be timed
This particular instruction, the STOP instruction,
causes the processor to stop executing code. It does
not make sense to time it.
Illegal Instructions
An opcode that is not recognized by the processor
causes an error message to be displayed. If an analysis
of procedure ILLEGAL at 0081 shown in Figure 6-4 is
done, the error message will complain of an illegal
opcode at address 0083.
51 TimeStack User's Guide Chapter Six - Advanced Tutorial
000147 0081 ; Illegal instructions
000148 0081 ;
000149 0081 ; These are illegal in demo.
000150 0081 ;
000151 0081 ; 8 min 8 max 0 stack
000152 0081 ;
000153 0081 ILLEGAL:
000154 0081 2701 BEQ ILL010
000155 0083 3D MUL
000156 0084 ILL010:
000157 0084 39 RTS
Figure 6-4 Illegal Instructions
If this is seen it is probably one of these problems:
* The wrong hex file has been loaded. The hex file
does not match the processor that this version of
TimeStack handles.
* The wrong processor has been chosen. Use the Options
menu to verify that the correct processor is being
used.
* The wrong start address was entered. If the start
address is not the beginning of an instruction it is
difficult to predict how it will be disassembled.
Nested Loops
There are a couple of ways that loops may become
nested. Nested loops have special considerations that
must be taken into account.
Loops inside subroutines
Look at Figure 6-5 which shows the procedure OUTLOOP at
address 0085. This procedure contains a loop that calls
another procedure INLOOP using a jump subroutine.
52 TimeStack User's Guide Chapter Six - Advanced Tutorial
000158 0085 ; Outer loop
000159 0085 ;
000160 0085 ; Outer loop of nested loops.
000161 0085 ;
000162 0085 ; 482 min 482 max 3 stack
000163 0085 ;
000164 0085 OUTLOOP:
000165 0085 8605 LDAA #5
000166 0087 OUT010:
000167 0087 36 PSHA
000168 0088 BD0090 JSR INLOOP
000169 008B 32 PULA
000170 008C 4A DECA
000171 008D 26F8 BNE OUT010
000172 008F 39 RTS
Figure 6-5 Loop with a call to a Procedure
The procedure INLOOP shown in Figure 6-6 also contains
a loop. Because this loop is located inside a procedure
that is called using a jump subroutine, no special
considerations are needed.
000173 0090 ; Inner loop
000174 0090 ;
000175 0090 ; Inner loop of nested loops.
000176 0090 ;
000177 0090 ; 77 min 77 max 0 stack
000178 0090 ;
000179 0090 INLOOP:
000180 0090 860A LDAA #10
000181 0092 IN010:
000182 0092 01 NOP
000183 0093 4A DECA
000184 0094 26FC BNE IN010
000185 0096 39 RTS
Figure 6-6 Procedure that contains a Loop
53 TimeStack User's Guide Chapter Six - Advanced Tutorial
Now analyze OUTLOOP starting at address 0085. The first
branch that will be questioned is the one at 0094 in
INLOOP. This is because it happens to be the first
backwards branch encountered when the analysis took the
jump subroutine. Upon inspection of the algorithm this
branch should be set to Take nine times. The next
backwards branch questioned is the one at 008D. This
should be set to Take four times according to its
algorithm.
Loops inside other loops
A loop that is inside of another loop does have special
considerations. The procedure TWOLOOP at address 0097
as shown in Figure 6-7 is an example of this. There is
an outer loop that is done five times. There is an
inner loop that is done ten times every time the outer
loop is done. Thus, the inner loop is done a total of
50 times.
000186 0097 ; Two loops
000187 0097 ;
000188 0097 ; Two loops in one.
000189 0097 ;
000190 0097 ; 436 min 436 max 0 stack
000191 0097 ;
000192 0097 TWOLOOP:
000193 0097 CE0005 LDX #5
000194 009A TWO010:
000195 009A 01 NOP
000196 009B 860A LDAA #10
000197 009D TWO020:
000198 009D 01 NOP
000199 009E 4A DECA
000200 009F 26FC BNE TWO020
000201 00A1 ;
000202 00A1 09 DEX
000203 00A2 26F6 BNE TWO010
000204 00A4 ;
000205 00A4 39 RTS
Figure 6-7 Nested Loops
54 TimeStack User's Guide Chapter Six - Advanced Tutorial
Edit the branch at 009F to Take 49 times and the branch
at 00A2 to Take four times to get the correct results
for this procedure.
Subroutines with Different Execution Times
Some subroutines have different execution times based
on parameters they are called with. Look at Figure 6-8.
The procedure VARLOOP at address 00A5 calls DIFSUB at
address 00B4 with a parameter that changes its
execution time. The proper way to analyze this
situation is to look at the different trial runs and
program each jump subroutine with the results.
000206 00A5 ; Variable loops
000207 00A5 ;
000208 00A5 ; Different loop times
000209 00A5 ;
000210 00A5 ; 211 min 211 max 2 stack
000211 00A5 ;
000212 00A5 VARLOOP:
000213 00A5 8605 LDAA #5
000214 00A7 BD00B4 JSR DIFSUB
000215 00AA 860A LDAA #10
000216 00AC BD00B4 JSR DIFSUB
000217 00AF 8614 LDAA #20
000218 00B1 7E00B4 JMP DIFSUB
000219 00B4 ;
000220 00B4 DIFSUB:
000221 00B4 4A DECA
000222 00B5 26FD BNE DIFSUB
000223 00B7 39 RTS
Figure 6-8 Subroutines with Different Execution Times
55 TimeStack User's Guide Chapter Six - Advanced Tutorial
The first time DIFSUB is called it loops five times.
Edit the conditional branch at 00B5 to Take four times.
Now analyze the procedure DIFSUB at address 00B4. You
should get the 30 cycles for the maximum execution time
and zero bytes for the maximum stack depth. Edit the
jump subroutine at address 00A7. Enter the values just
obtained at the prompts for maximum cycle time and
maximum stack depth.
The second time DIFSUB is called it loops ten times.
Edit the conditional branch at 00B5 to Take nine times
and run the analysis on it again. This time you should
get 55 cycles for the maximum execution time and still
zero bytes for maximum stack depth. Edit the jump
subroutine at address 00AC and enter these values.
The last time DIFSUB is called it loops twenty times.
Edit the conditional branch at 00B5 to Take nineteen
times. Now you can analyze VARLOOP at 00A5 to get its
correct worst case results which should be 211 cycles.
Stack Imbalance
Analyze the procedure STKIMB at address 00B8 and shown
in Figure 6-9. A warning is displayed that says a
mismatch of the stack occurred following the
conditional branch at address 00B9. It says that stack
depth when the branch is taken is -2 bytes deep and
when the branch falls through it is only -1 bytes deep.
000224 00B8 ; Stack Imbalance
000225 00B8 ;
000226 00B8 ; Stack may become imbalanced
000227 00B8 ;
000228 00B8 ; 10 min 13 max 1 stack
000229 00B8 ;
000230 00B8 STKIMB:
000231 00B8 01 NOP
000232 00B9 2601 BNE STK010
000233 00BB 36 PSHA
000234 00BC STK010:
000235 00BC 39 RTS
Figure 6-9 Stack Imbalance
56 TimeStack User's Guide Chapter Six - Advanced Tutorial
A close look at the algorithm shows what has happened.
One path of the conditional branch at 00B9 will push a
register while the other path does not. This creates
the possibility of a stack imbalance.
Infinite Loops
Infinite loops in the program will eventually cause the
analysis to reach an internal limitation and stop. Look
at Figure 6-10. The procedure SIMPLOOP at address 005A
has a conditional branch at 005E that forms a loop.
Edit this branch and set it to Take always. This is
done by setting the number of times to take the branch
to zero.
000075 005A ; Simple loop
000076 005A ;
000077 005A ; A simple loop.
000078 005A ;
000079 005A ; 42 min 42 max 0 stack
000080 005A ;
000081 005A SIMPLOOP:
000082 005A 8605 LDAA #5
000083 005C SIMP010:
000084 005C 01 NOP
000085 005D 4A DECA
000086 005E 26FC BNE SIMP010
000087 0060 39 RTS
Figure 6-10 Simple Loop
Now do an analysis on this procedure. The analysis runs
until an internal TimeStack limitation is reached. This
is usually stack depth but it could be memory. Every
time a conditional branch or jump subroutine is
encountered in the analysis a little bit of internal
57 TimeStack User's Guide Chapter Six - Advanced Tutorial
memory and stack depth is used by TimeStack. If the
analysis encounters a loop that runs for a long time
this internal limitation of TimeStack may eventually be
reached.
Memory limitations
If a memory limitation is reached, it is up to the user
to determine if or how the program entered into a large
or infinite loop. In general, it is not a good idea to
try and time loops that run for more than a couple of
hundred iterations. Also, it may be that one of the
conditional branches has not been programmed or
programmed incorrectly. It may be possible to narrow
down the area that is the problem by changing the start
and stop addresses if a large procedure is being
analyzed.
A solution to timing loops that run for a large number
of times is to time the loop when it is taken only
once. Then time the loop when it is taken twice.
Calculate the difference between these results and you
have how long each time through the loop will take.
Multiply this value by number of iterations minus one
through the loop and add it to the time it took for
once through the loop. It may even be beneficial to
document how many cycles each iteration of the loop
takes.
Branch Past Stop Address
Analyze the procedure FWDBRA at address 002F shown in
Figure 6-11. Use a start address of 002F and a stop
address of 003B.
58 TimeStack User's Guide Chapter Six - Advanced Tutorial
000032 002F ; Forward branches
000033 002F ;
000034 002F ; only forward branches.
000035 002F ;
000036 002F ; 16 min 26 max 0 stack
000037 002F ;
000038 002F FWDBRA:
000039 002F 47 ASRA
000040 0030 2406 BCC FWD010
000041 0032 CE002A LDX #SIMPLE
000042 0035 47 ASRA
000043 0036 2405 BCC FWD020
000044 0038 FWD010:
000045 0038 CE002F LDX #FWDBRA
000046 003B 2006 BRA FWDRET
000047 003D FWD020:
000048 003D 47 ASRA
000049 003E 2403 BCC FWDRET
000050 0040 CE0044 LDX #BCKBRA
000051 0043 FWDRET:
000052 0043 39 RTS
Figure 6-11 Forward Branches
A warning message indicates that the branch at address
0036 was past the stop address. When this condition
occurs in an analysis only the first violation is
shown. TimeStack does not look at any portion of the
program that is past the stop address. In this example
the take path of the conditional branch at 0036 is
ignored.
Actual Stop Address
Still referring to Figure 6-11, do an analysis from
002F to a stop address of 1234. A warning is displayed
that indicates the specified stop address was never
reached. It says the true stop address is 0043.
TimeStack figures out what the greatest execution
address obtained is. This does not include jump to
subroutines. If the stop address was not FFFF and the
59 TimeStack User's Guide Chapter Six - Advanced Tutorial
stop address entered is greater than what TimeStack
thinks it should have been, this warning is displayed.
Forcing Conditional Branches
Forcing branches to take different paths to analyze
unique scenarios may be done quickly with the use of
F2. Use the cursor keys to move the branch to be
modified to the top of the Special Nodes window and
press F2. This may also be done inside the Disassembly
window.
Save to File
It is convenient to save the analysis for printing
using the Print menu. It is helpful to have the disk
file name match the name of the subroutine or module
that was analyzed.
High Level Languages
It is possible to use TimeStack with a high level
language. A listing of the compiled output from the
high level language compiler with the generated
assembly statements is needed. The listing is used to
find the start and stop addresses of procedures and to
figure out where the conditional branches are. Some
knowledge of how the compiler creates loop structures
is desirable.
60 TimeStack User's Guide Appendix A - Listing of Demo Program
Appendix A - Listing of Demo Program
000001 0000 ; Main program
000002 0000 ;
000003 0000 ; 1424 min 1444 max 5 stack
000004 0000 ;
000005 0000 MAIN:
000006 0000 BD002A JSR SIMPLE
000007 0003 BD002F JSR FWDBRA
000008 0006 BD0044 JSR BCKBRA
000009 0009 BD005A JSR SIMPLOOP
000010 000C BD0061 JSR BACKLOOP
000011 000F BD006A JSR COMPLEX
000012 0012 BD0077 JSR INDJMP
000013 0015 BD007D JSR INSTIME
000014 0018 BD0081 JSR ILLEGAL
000015 001B BD0085 JSR OUTLOOP
000016 001E BD0097 JSR TWOLOOP
000017 0021 BD00A5 JSR VARLOOP
000018 0024 CE002A LDX #SIMPLE
000019 0027 AD00 JSR 0,X ; Uses 0 cycles 0 stack
000020 0029 39 RTS
61 TimeStack User's Guide Appendix A - Listing of Demo Program
000021 002A ; Simple subroutine
000022 002A ;
000023 002A ; Contains no conditional branches.
000024 002A ;
000025 002A ; 11 min 11 max 0 stack
000026 002A ;
000027 002A SIMPLE:
000028 002A 40 NEGA
000029 002B 48 ASLA
000030 002C 8B05 ADDA #5
000031 002E 39 RTS
000032 002F ; Forward branches
000033 002F ;
000034 002F ; Contains only forward branches.
000035 002F ;
000036 002F ; 16 min 26 max 0 stack
000037 002F ;
000038 002F FWDBRA:
000039 002F 47 ASRA
000040 0030 2406 BCC FWD010
000041 0032 CE002A LDX #SIMPLE
000042 0035 47 ASRA
000043 0036 2405 BCC FWD020
000044 0038 FWD010:
000045 0038 CE002F LDX #FWDBRA
000046 003B 2006 BRA FWDRET
000047 003D FWD020:
000048 003D 47 ASRA
000049 003E 2403 BCC FWDRET
000050 0040 CE0044 LDX #BCKBRA
000051 0043 FWDRET:
000052 0043 39 RTS
62 TimeStack User's Guide Appendix A - Listing of Demo Program
000053 0044 ; Backward normal branches
000054 0044 ;
000055 0044 ; Only backward normal branches.
000056 0044 ;
000057 0044 ; 16 min 26 max 0 stack
000058 0044 ;
000059 0044 BCKBRA:
000060 0044 47 ASRA
000061 0045 2407 BCC BCK010
000062 0047 CE002A LDX #SIMPLE
000063 004A 47 ASRA
000064 004B 2406 BCC BCK020
000065 004D BCKRET:
000066 004D 39 RTS
000067 004E BCK010:
000068 004E CE002F LDX #FWDBRA
000069 0051 20FA BRA BCKRET
000070 0053 BCK020:
000071 0053 47 ASRA
000072 0054 24F7 BCC BCKRET
000073 0056 CE0044 LDX #BCKBRA
000074 0059 39 RTS
000075 005A ; Simple loop
000076 005A ;
000077 005A ; A simple loop.
000078 005A ;
000079 005A ; 42 min 42 max 0 stack
000080 005A ;
000081 005A SIMPLOOP:
000082 005A 8605 LDAA #5
000083 005C SIMP010:
000084 005C 01 NOP
000085 005D 4A DECA
000086 005E 26FC BNE SIMP010 ; TAKE 4
000087 0060 39 RTS
63 TimeStack User's Guide Appendix A - Listing of Demo Program
000088 0061 ; Loop with backwards branch
000089 0061 ;
000090 0061 ; Simple loop with a normal backwards
000091 0061 ; branch that terminates in middle.
000092 0061 ;
000093 0061 ; 62 min 62 max 0 stack
000094 0061 ;
000095 0061 BACKLOOP:
000096 0061 8606 LDAA #6
000097 0063 BACK010:
000098 0063 4A DECA
000099 0064 2703 BEQ BACKRET ; FALL 5
000100 0066 01 NOP
000101 0067 20FA BRA BACK010
000102 0069 BACKRET:
000103 0069 39 RTS
000104 006A ; Complex loop
000105 006A ;
000106 006A ; A loop that will trigger the
000107 006A ; complex loop message.
000108 006A ;
000109 006A ; 43 min 43 max 2 stack
000110 006A ;
000111 006A COMPLEX:
000112 006A 8605 LDAA #5
000113 006C COMPL1:
000114 006C 4A DECA
000115 006D 2704 BEQ COMPX1 ; FALL 2
000116 006F 4A DECA
000117 0070 26FA BNE COMPL1 ; TAKE 2
000118 0072 39 RTS
000119 0073 COMPX1:
000120 0073 BD0076 JSR COMPX2
000121 0076 COMPX2:
000122 0076 39 RTS
64 TimeStack User's Guide Appendix A - Listing of Demo Program
000123 0077 ; Indirect jump test
000124 0077 ;
000125 0077 ; Indirect jump that goes some
000126 0077 ; place and one that returns.
000127 0077 ;
000128 0077 ; 11 min 11 max 0 stack
000129 0077 ;
000130 0077 INDJMP:
000131 0077 6E00 JMP 0,X ; Destination JMPRET
000132 0079 01 NOP
000133 007A JMPRET:
000134 007A 38 PULX ; Pull return address
000135 007B 6E00 JMP 0,X ; Indirect jump as RTS
000136 007D ; Instruction not timeable
000137 007D ;
000138 007D ; This can not be timed.
000139 007D ;
000140 007D ; 8 min 8 max 0 stack
000141 007D ;
000142 007D INSTIME:
000143 007D 2701 BEQ INST010 ; May be skipped
000144 007F CF STOP ; Stop instruction
000145 0080 INST010:
000146 0080 39 RTS
000147 0081 ; Illegal instructions
000148 0081 ;
000149 0081 ; These are illegal in demo.
000150 0081 ;
000151 0081 ; 8 min 8 max 0 stack
000152 0081 ;
000153 0081 ILLEGAL:
000154 0081 2701 BEQ ILL010 ; May be skipped
000155 0083 3D MUL
000156 0084 ILL010:
000157 0084 39 RTS
65 TimeStack User's Guide Appendix A - Listing of Demo Program
000158 0085 ; Outer loop
000159 0085 ;
000160 0085 ; Outer loop of nested loops.
000161 0085 ;
000162 0085 ; 482 min 482 max 3 stack
000163 0085 ;
000164 0085 OUTLOOP:
000165 0085 8605 LDAA #5
000166 0087 OUT010:
000167 0087 36 PSHA
000168 0088 BD0090 JSR INLOOP
000169 008B 32 PULA
000170 008C 4A DECA
000171 008D 26F8 BNE OUT010 ; TAKE 4
000172 008F 39 RTS
000173 0090 ; Inner loop
000174 0090 ;
000175 0090 ; Inner loop of nested loops.
000176 0090 ;
000177 0090 ; 77 min 77 max 0 stack
000178 0090 ;
000179 0090 INLOOP:
000180 0090 860A LDAA #10
000181 0092 IN010:
000182 0092 01 NOP
000183 0093 4A DECA
000184 0094 26FC BNE IN010 ; TAKE 9
000185 0096 39 RTS
66 TimeStack User's Guide Appendix A - Listing of Demo Program
000186 0097 ; Two loops
000187 0097 ;
000188 0097 ; Two loops in one.
000189 0097 ;
000190 0097 ; 436 min 436 max 0 stack
000191 0097 ;
000192 0097 TWOLOOP:
000193 0097 CE0005 LDX #5
000194 009A TWO010:
000195 009A 01 NOP
000196 009B 860A LDAA #10
000197 009D TWO020:
000198 009D 01 NOP
000199 009E 4A DECA
000200 009F 26FC BNE TWO020 ; TAKE 49
000201 00A1 ;
000202 00A1 09 DEX
000203 00A2 26F6 BNE TWO010 ; TAKE 4
000204 00A4 ;
000205 00A4 39 RTS
000206 00A5 ; Variable loops
000207 00A5 ;
000208 00A5 ; Different loop times
000209 00A5 ;
000210 00A5 ; 211 min 211 max 2 stack
000211 00A5 ;
000212 00A5 VARLOOP:
000213 00A5 8605 LDAA #5
000214 00A7 BD00B4 JSR DIFSUB ; 30 cycles
000215 00AA 860A LDAA #10
000216 00AC BD00B4 JSR DIFSUB ; 55 cycles
000217 00AF 8614 LDAA #20
000218 00B1 7E00B4 JMP DIFSUB
000219 00B4 ;
000220 00B4 DIFSUB:
000221 00B4 4A DECA
000222 00B5 26FD BNE DIFSUB ; TAKE 19
000223 00B7 39 RTS
67 TimeStack User's Guide Appendix A - Listing of Demo Program
000224 00B8 ; Stack Imbalance
000225 00B8 ;
000226 00B8 ; Stack may become imbalanced
000227 00B8 ;
000228 00B8 ; 10 min 13 max 1 stack
000229 00B8 ;
000230 00B8 STKIMB:
000231 00B8 01 NOP
000232 00B9 2601 BNE STK010
000233 00BB 36 PSHA
000234 00BC STK010:
000235 00BC 39 RTS
68 TimeStack User's Guide Appendix B - Warning and Error Messages
Appendix B - Warning and Error Messages
Warning Messages
Warning messages indicate that everything is OK but
that there may be something to watch out for or
additional information is needed.
A mismatch of the stack occurred
A conditional branch has two possible paths, the path
that results when the branch is taken and when it falls
through. This indicates that the stack depth is
different depending on which path is analyzed. It may
be possible for the stack to become unbalanced
depending on how the program works.
Backwards branch or jump at address %x
If a backwards branch or jump is encountered it is
possible for a loop to exist. This gives the user the
opportunity to review the program at this point to see
if a loop is in progress.
Branch at address %x was past the stop address
A branch encountered during the analysis branched past
the given stop address. The analysis results may not be
valid because this branch has not been fully explored.
It may also indicate that the stop address entered
should be higher to do a full analysis.
69 TimeStack User's Guide Appendix B - Warning and Error Messages
Indirect jump at address %x needs a destination
The address that an indirect jump goes to is needed to
complete the analysis.
Indirect jump subroutine at address %x needs cycle time
and stack depth
An indirect jump subroutine must have the maximum
number of clock cycles and maximum stack depth used by
the intended subroutine. This is more versatile than
entering an address to jump to.
The specified stop address %x was never reached
The stop address entered was not encountered during the
analysis. This usually happens when the stop address
entered is less than the start address. Another
possibility is that a return from subroutine was
encountered before the stop address entered and the
logic flow did not allow it to reach the given stop
address.
Error Messages
An error message terminates the function being done. It
means some corrective action should be taken to fix the
problem.
Error list file is version %x
The special node file being read in has a version
number that does not match this version of TimeStack.
Error opening configuration file %s for reading
There is an error opening the given file for reading
and writing.
Error opening configuration file %s for writing
The configuration file has an error while opening it
for writing.
Error opening print file %s for writing
There is an error opening the given file for writing.
70 TimeStack User's Guide Appendix B - Warning and Error Messages
Error reading configuration file header
The first line of information in the configuration file
is bad. This usually means the file is not a valid
configuration file. Check the file name entered or the
configuration file being used.
Error with size of configuration file
The configuration file is too large to be valid. Check
to see that the given file is actually a configuration
file.
Error with the configuration version number
The configuration file has a version that is greater
then the program reading it. Use the correct version of
TimeStack that matches the configuration file.
Fatal internal error...
An error occurred in the internal logic of TimeStack.
This error should not occur in practice but is listed
here for completeness. If this error persists, write
down the details and contact BE, Inc.
File error opening %s
The file indicated was not found for the reason
specified.
Illegal opcode %x at address %x
The opcode at this address is not a valid instruction
for the current processor type. This might happen if a
hex file for another processor is loaded, the wrong
processor type was chosen, or an incorrect start
address has been entered.
One or both of the help files...
One or both of the indicated help files is missing or
can not be located by the TimeStack program. These
files are first looked for in the current drive and
directory. If they are not found there, each directory
specified in the PATH environment variable is searched
in turn until the files are found or the paths are
exhausted.
71 TimeStack User's Guide Appendix B - Warning and Error Messages
The address %x is not an address loaded
The address encountered is not an address that was
loaded from the hex file. Unless it is loaded from the
hex file, the contents are undefined.
The analysis is limited by the amount of free memory
remaining
The analysis is limited by the amount of memory in the
system. Each jump subroutine and conditional branch
encountered requires a little bit more. This usually
means an infinite loop has been encountered or it may
mean a loop that occurs more times than TimeStack can
handle.
The analysis is limited by the stack depth
The analysis is limited by the amount of program stack
in the system. This can not be changed by the user.
Each jump subroutine and conditional branch encountered
requires a little bit more. This usually means an
infinite loop has been encountered. It may also mean a
loop has been set up and is taken more times than
TimeStack can handle.
The branch at address %x is involved in a difficult
structure
Some loop structures are too difficult to analyze
without some assistance. This is the branch that needs
to be set for the loop in question.
The file %s does not seem to be Motorola or Intel Hex
format
The letter S or a colon was not found to be the first
character in the first line of the file.
The file %s has a bad checksum
The checksum in one of the records in the hex file is
incorrect.
The file %s had no hex information
This file was scanned and identified as a Motorola or
Intel hex file but no hex data was found after that. It
probably is not a hex file at all.
72 TimeStack User's Guide Appendix B - Warning and Error Messages
The number of steps to execute a series of
instructions...
A series of instructions with no conditional branch to
divide it up has been encountered. This is probably an
infinite loop.
The opcode %x at address %x is not able to be analyzed
for time
The opcode at this address can not be logically
analyzed. This is usually an instruction like halt the
processor or wait for an interrupt to occur.
The processor type found in the configuration file...
The processor type found in the configuration file does
not match any of the processors that this version of
the TimeStack handles.
The processor type information was not found...
The configuration file must indicate what type of
processor TimeStack should use. This information is
missing.
Virtual file error writing %s
There was a problem writing to the temporary file
created on the disk. The most likely reason is that the
disk was full. The temporary files need at least 50K of
space when TimeStack runs.
73 TimeStack User's Guide Appendix C - Key Summary
Appendix C - Key Summary
F1 Obtains context sensitive on-line
help.
F2 Edit address on top line of selected
window.
F3 Select next window.
F4 Select previous window.
F5 Reserved for future use.
F6 Move and adjust selected window.
ALT-A Analysis
ALT-C Clear
ALT-D Disasm
ALT-E Edit
ALT-F File
ALT-L File | Load
ALT-O Options
ALT-P Print
ALT-Q Quit
74 TimeStack User's Guide Appendix C - Key Summary
ALT-R File | Restore
ALT-S File | Save
ALT-1 - ALT-6 Select the window with that number.
Home Move to beginning of list in window or
beginning of line.
CTRL-Home Move to beginning of list in window.
End Move to end of list in window or end
of line.
CTRL-End Move to end of list in window.
Pg Up Move up one window's worth.
Pg Dn Move down one window's worth.
Cur Up Move up one line in window or pull
down menu.
CTRL-Pg Up Move up one line in window.
Cur Dn Move down one line in window or pull
down menu.
CTRL-Pg Dn Move down one line in window.
Ins Toggles insert mode when entering
data.
Del Deletes the character at the cursor
position.
Backspace Deletes the character just in front of
the cursor.
Cur Left Moves the cursor left one character.
Cur Right Moves the cursor right one character.
75 TimeStack User's Guide Appendix D - Processor Specifics
Appendix D - Processor Specifics
TSDEMO
The processor used for the demo program is based on a
subset of the 68HC11 processor.
The default clock divisor value is four.
The following opcodes have been removed:
* any instruction that requires a PREBYTE
* all special instructions such as MUL, FDIV, IDIV
* everything that operates on registers B, D, or Y
76 TimeStack User's Guide Appendix D - Processor Specifics
TS6811
The default clock divisor value is four.
6800
The processors that fall in this category are:
6800.
6801
The processors that fall in this category are:
6801, 6801U4, 68701, 68701U4.
6802
This processor is identical to the 6800 for the purpose
of analysis. It has a separate entry for labeling
purposes.
The processors included in this category are:
6802.
6803
These processors are identical to the 6801 for the
purpose of analysis. It has a separate entry for
labeling purposes.
The processors that fall in this category are:
6803, 6803U4.
68HC11
The processors that fall in this category are:
68HC11A0, 68HC11A1, 68HC11A7, 68HC11A8,
68HC11D0, 68HC11D3, 68HC11E0, 68HC11E1,
68HC11E2, 68HC11E8, 68HC11E9, 68HC11F1,
68HC11L0, 68HC11L1, 68HC11L5, 68HC11L6,
68HC711D3, 68HC711E9, 68HC711K4, 68HC711J6,
68HC711L6.
77 TimeStack User's Guide Appendix D - Processor Specifics
TS6805
There are a very large number of different 6805
variations but for timing purposes they fall into three
categories. These are HMOS, HCMOS, and CMOS. If a
specific processor has not been mentioned it should be
obvious where it should be placed by looking at its
number.
6805 HMOS
The default clock divisor value is four.
The HMOS processors that fall in this category are:
6805P2, 6805P6, 6805R2, 6805R3, 6805R6,
6805S2, 6805S3, 6805U2, 6805U3, 68705P3,
68705P5, 68705R3, 68705R5, 68705S3, 68705U3,
68705U5.
68HC05 HCMOS
The default clock divisor value is two.
The HCMOS processors that fall in this category are:
68HC05A6, 68HC05B4, 68HC05B6, 68HC05C2,
68HC05C3, 68HC05C4, 68HC05C5, 68HC05C8,
68HC05C9, 68HC05D9, 68HC05E0, 68HC05E1,
68HC05J1, 68HC05L6, 68HC05L7, 68HC05L9,
68HC05M4, 68HC05P1, 68HC05P4, 68HC05P7,
68HC05P8, 68HC05P9, 68HC05SC11, 68HC05SC21,
68HC05T1, 68HC05T2, 68HC05T7, 68HCL05C4,
68HCL05C8, 68HSC05C4, 68HSC05C8, 68HC705B5,
68HC705C8, 68HC705J2, 68HC705P9, 68HC805B6,
68HC805C4.
146805 CMOS
The default clock divisor value is four.
The CMOS processors that fall in this category are:
146805E2, 146805F2, 146805G2.
78 TimeStack User's Guide Appendix D - Processor Specifics
TS8051
The default clock divisor value is twelve.
The disassembler for this family of processors will
show the internal register names and bits.
8051
The processors that fall in this category are:
8051, 8052, 8751.
8031
This processor is identical to the 8051 for the purpose
of analysis. It has a separate entry for labeling
purposes.
The processors that fall in this category are:
8031, 8032.
79 TimeStack User's Guide Appendix D - Processor Specifics
TS8048
The 8048 processors handle extended program memory in a
special way. For programs of 2K bytes or less, program
memory may be addressed in a conventional manner.
Address above 2K can be reached by executing a program
memory bank switch instruction (SEL MB0 or SEL MB1)
followed by a branch instruction such as JMP or CALL. A
bit called DBF (memory bank flip-flop) contains the
setting of the last SEL MB0 or SEL MB1 instruction. All
JMP's and CALL's use this bit to determine which memory
bank (lower 2K or upper 2K) to execute from.
The problem is when the analysis begins it is not known
what state the DBF bit should be set to. This is
handled by initially setting the DBF bit to match the
memory bank of the start address given in the analysis.
Another minor issue is that of indirect jumps. The
range is limited to 256 bytes but the program will
allow a 16-bit address to be entered.
The stack depth of the 8048 processors allows a nesting
level of eight. After that the stack pointer wraps
around and the oldest return address is lost. The
TimeStack analysis does not detect this.
8048 family
The default clock divisor value is fifteen.
The processors that fall in this category are:
8035, 8039, 8040, 8048, 8049, 8050, 8748, 8749.
8021/8020
The default clock divisor value is thirty.
The processors that fall in this category are:
8021, 8020.
8022
The default clock divisor value is thirty.
The processors that fall in this category are:
8022.
80 TimeStack User's Guide Index
Index different processors, 27
Bytes
memory usage, 45
- 6 - - C -
6800, 77 Clear, 16
6805, 78 Clock
changing clock divisor, 17
6811, 77 changing rate, 16
cycles, 45
demo program, 37
- 8 -
Command line
8048, 80 syntax, 7
8051, 79 Comment
added to print, 18
- A - Complex loops, 48
Addresses, see also Start and Concepts
stop timing, 31
entering, 12
Conditional branch
Analysis, 14, see also Timing description, 31
demo program, 38 different processors, 27
window, 21 edit, 15
fall, 32
Assembly language, see Source forcing, 60
code inside subroutine, 39
normal, 32
Autoexec.bat, see take, 31
Configuration
Configuration
Automatically save autoexec.bat, 7
demo configuration, 37 automatically save, 17
demo program, 37
file, 14, 29
- B - get, 14
put, 14
BE, Inc. system requirements, 6
how to contact, 5
Cycles
Branch clock, 45
past stop address, 58
Branch relative
81 TimeStack User's Guide Index
- D - F5, Reserved for future
use, 22
Demo program F6 - Move or size window,
configuration, 37 23
invoking, 36
limitations, 27
processor specifics, 76 - H -
DEMO.HEX, 36 Help
on-line, 24
Disasm, 16
window, 20 Hex file, 13
description, 27
Intel, 28
- E - load, 13
load DEMO.HEX, 37
Edit, 15 Motorola, 28
conditional branch, 15 possible errors, 29
jump indirect, 16
jump to subroutine, 15 High level languages, 60
Error messages, 70 Hot keys
Alt-1 - Alt-6, Select
window, 23
- F - Alt-A, Analysis, 14, 23
Alt-C, Clear, 16, 23
Fall, see Conditional branch Alt-D, Disasm, 16, 23
Alt-E, Edit, 15, 23
File, 13, see also Node file Alt-F, File, 13, 23
get, 14 Alt-L, Load, 13, 23
load, 13 Alt-O, Options, 16, 23
put, 14 Alt-P, Print, 17, 23
restore, 13 Alt-Q, Quit, 19, 23
save, 13 Alt-R, Restore, 13, 23
Alt-S, Save, 13, 23
Filenames
entering, 11
- I -
Files, see also Configuration,
see also Temporary files Illegal instructions, 51
Forcing Indirect jump, see also Jump
conditional branches, 60 indirect, 50
Function keys Infinite loops, 57
F1, Help, 22
F2, Edit top item, 22, 60 Information
F3, Select next window, 22 get summary, 37
F4, Select previous window,
22 Installation
performing, 6
82 TimeStack User's Guide Index
Instructions - L -
illegal, 51
untimeable, 51 Languages, 60
Intel Limitations
8048, 80 demo program, 27
8051, 79 memory, 58
hex file, 28
Listing
description, 29
- J - have it ready, 45
looking it over, 36
Jump
different processors, 27 Loading
DEMO.HEX, 37
Jump indirect, 35 TimeStack, 8
as return from subroutine,
35 Loops
different processors, 27 complex, 48
edit, 16 description, 32
exit at bottom, 33, 41
Jump to subroutine exit in middle, 33, 42
different processors, 27 infinite, 57
edit, 15 inside other loops, 54
inside subroutines, 52
nested, 52
- K -
Key - M -
summary, 74
Maximum execution
Keys, see also Function keys, strategy, 45
see also Hot keys window, 21
Backspace, 24
Ctrl-End, 24 Memory
Ctrl-Home, 23 limitations, 58
Ctrl-Pg Dn, 24
Ctrl-Pg Up, 24 Menus, see also individual
Cur Dn, 24 menu names
Cur Left, 24 entering filenames, 11
Cur Right, 24 entering numbers, 12
Cur Up, 24 operation of, 10
Del, 24 screen layout, 9
End, 23 selections, 13
Home, 23 status line, 11
Ins, 24
Pg Dn, 24 Minimum execution
Pg Up, 24 strategy, 45
window, 22
Mnemonics
83 TimeStack User's Guide Index
differences, 26 path to printer, 18
results, 43, 60
Motorola
6800, 77 Processor
6805, 78 6800, 77
6811, 77 6805, 78
hex file, 28 6811, 77
8048, 80
8051, 79
- N - demo program type, 37, 76
display of type, 16
Node file, 13
automatically save, 17, 19 Program listing, see Listing
description, 30
restore, 13 Program loops, see Loops
save, 13
Program names, 7
Nodes
clearing, 16
editing, 15 - Q -
window, 20
Quit, 19, 44
Normal, see Conditional branch
Numbers - R -
bases, 12
entering, 12 README, 6
prefixes and postfixes, 12
Registration
user registration, 5
- O -
Relative branch, see Branch
Options, 16 relative
clock rate, 16
config, 17 Return from subroutine, see
divisor for clock, 17 also Subroutine
get, 17 different processors, 27
node, 17 stop address, 15
type of processor, 16 using jump indirect, 35
Running
- P - TimeStack, 8
Prefixes and Postfixes
entering numbers, 12 - S -
Print, 17 Save
comment, 18 results to file, 60
disasm to file, 18
disasm to printer, 18 Screen, see Menus or Windows
path to file, 18
84 TimeStack User's Guide Index
Simulator - T -
comparison with TimeStack,
2 Take, see Conditional branch
definition, 2
Temporary files, 30
Source code
format, 25 TimeStack
mnemonic differences, 26 benefits of using, 1
comparison with simulator,
Special nodes 2
window, 20 loading and running, 8
program names, 7
Stack depth tutorial, 36
description, 35
imbalance, 56 Timing, see also Loops
strategy, 45 concepts, 31
window, 22 indirect jump, 50
multiple paths, 47
Start address strategy, 45
examples, 39 subroutines, 55
Start and stop TPDEMO, 36, 48
description, 30
entering, 14
- U -
Status line, 11
User registration, see
Stop address Registration
actual, 59
branch past, 58
examples, 39 - W -
Strategy, see Timing Warning messages, 69
Subroutines Windows
conditional branches, 39 analysis results, 21
description, 34 description, 19
different execution times, disassembly, 20
55 display of subroutines, 20
entering execution time, 34 maximum execution, 21
entering stack depth, 34 minimum execution, 22
indirect, 34 moving and sizing, 19
loops inside of, 52 screen layout, 9
return from, 34 selecting, 19
simple timing, 38 special nodes, 20
stack depth, 22
Syntax status line, 11
command line, 7
System
requirements, 6
85